java 滚动条一直在在哪里,为什么水平滚动条仍然出现在此面板中?

我有一个包含许多小面板的 Panel .

包含面板的 AutoScroll 设置为true,这样当有太多小面板时我可以向下滚动 .

小面板的宽度始终设置为容器的客户端宽度(允许边框等),因此不应显示水平滚动条 .

这似乎主要是这种情况,除非最后一个子面板触摸包含面板的底部,然后水平滚动条出现,当我不想要它!

将下面的代码粘贴到新的Winform中并尝试以下步骤:

按下'Add'按钮4次以获得4个面板,它们应该从容器底部移开 .

垂直调整表单大小,以便在最后一个面板后面有一些空格 .

现在小心地垂直调整表格大小,使最后一个面板的底部接触容器的底部 . 滚动条应该出现在这里,可能需要一些“摆动” .

static List listOfPanels;

static Panel panel;

static bool flipflop;

private void Form1_Load(object sender, EventArgs e)

{

Height = 400;

Width = 400;

listOfPanels = new List();

panel = new Panel()

{

Height = this.ClientSize.Height - 20,

Width = 200,

Top = 10,

Left = 10,

BackColor = Color.White,

BorderStyle = BorderStyle.FixedSingle,

Padding = Padding.Empty,

Margin = Padding.Empty,

Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom,

};

// I'VE TRIED DISABLING IT HERE!

panel.AutoScroll = false;

panel.HorizontalScroll.Enabled = false;

panel.HorizontalScroll.Visible = false;

panel.AutoScroll = true;

panel.Resize += panel_Resize;

Button button = new Button()

{

Text = @"Add",

Size = new Size(100, 50),

Top = 10,

Left = 20 + panel.Width

};

button.Click += button_Click;

Controls.Add(panel);

Controls.Add(button);

}

void panel_Resize(object sender, EventArgs e)

{

renderSubPanels();

}

void button_Click(object sender, EventArgs e)

{

Panel subPanel = new Panel()

{

Height = 100,

BackColor = flipflop ? Color.PeachPuff : Color.PowderBlue,

Top = (listOfPanels.Count * 100) - Math.Abs(panel.AutoScrollPosition.Y)

};

listOfPanels.Add(subPanel);

flipflop = !flipflop;

panel.Controls.Add(subPanel);

renderSubPanels();

}

void renderSubPanels()

{

panel.SuspendLayout();

bool verticalScrollVisible = listOfPanels.Count * 100 > panel.ClientSize.Height;

foreach (Panel p in listOfPanels)

{

if (verticalScrollVisible)

{

p.Width = panel.Width - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth - 2;

}

else

{

p.Width = panel.Width - 2;

}

p.Top = (listOfPanels.IndexOf(p) * 100) - Math.Abs(this.AutoScrollPosition.Y);

}

panel.ResumeLayout();

}

在我的真实计划中,它与我合作,因此我对创意持开放态度 . 我只想让讨厌的东西消失!

谢谢!

是的,Java Swing滚动条可以使用自定义的标签来替代默认的滚动条。你使用JScrollBar类的setUI()方法来设置自定义的UI。 下面是一个简单的例子,演示如何使用自定义的图片标签来替默认的垂直滚动条: ```java import java.awt.*; import javax.swing.*; public class CustomScrollBarExample extends JFrame { public CustomScrollBarExample() { super("Custom Scroll Bar Example"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(200, 200)); panel.setLayout(new BorderLayout()); // 创建一个自定义的滚动条UI CustomScrollBarUI customScrollBarUI = new CustomScrollBarUI(); JScrollBar scrollBar = new JScrollBar(JScrollBar.VERTICAL); scrollBar.setUI(customScrollBarUI); panel.add(scrollBar, BorderLayout.EAST); getContentPane().add(panel); } public static void main(String[] args) { CustomScrollBarExample example = new CustomScrollBarExample(); example.setVisible(true); } } // 自定义的滚动条UI class CustomScrollBarUI extends BasicScrollBarUI { // 滚动条的宽度 private static final int SCROLLBAR_WIDTH = 20; // 滚动条的高度 private static final int SCROLLBAR_HEIGHT = 200; // 滚动条的背景颜色 private static final Color SCROLLBAR_BACKGROUND = new Color(255, 255, 255); // 滑块的图片 private static final ImageIcon THUMB_IMAGE = new ImageIcon("thumb.png"); // 增加按钮的图片 private static final ImageIcon INCREASE_BUTTON_IMAGE = new ImageIcon("increase.png"); // 减少按钮的图片 private static final ImageIcon DECREASE_BUTTON_IMAGE = new ImageIcon("decrease.png"); @Override protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { g.setColor(SCROLLBAR_BACKGROUND); g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height); } @Override protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { THUMB_IMAGE.paintIcon(c, g, thumbBounds.x, thumbBounds.y); } @Override protected void paintDecreaseHighlight(Graphics g) { DECREASE_BUTTON_IMAGE.paintIcon(scrollbar, g, decreaseRect.x, decreaseRect.y); } @Override protected void paintIncreaseHighlight(Graphics g) { INCREASE_BUTTON_IMAGE.paintIcon(scrollbar, g, increaseRect.x, increaseRect.y); } @Override protected JButton createDecreaseButton(int orientation) { return new JButton(DECREASE_BUTTON_IMAGE); } @Override protected JButton createIncreaseButton(int orientation) { return new JButton(INCREASE_BUTTON_IMAGE); } @Override protected Dimension getMinimumThumbSize() { return new Dimension(THUMB_IMAGE.getIconWidth(), THUMB_IMAGE.getIconHeight()); } @Override protected Dimension getPreferredSize(JComponent c) { if (scrollbar.getOrientation() == JScrollBar.VERTICAL) { return new Dimension(SCROLLBAR_WIDTH, SCROLLBAR_HEIGHT); } else { return new Dimension(SCROLLBAR_HEIGHT, SCROLLBAR_WIDTH); } } } ``` 在上面的例子,我们创建了一个CustomScrollBarUI类来实现自定义的滚动条UI。在这个类,我们重写了几个方法来实现自定义的滚动条: - paintTrack()方法用来绘制滚动条的背景颜色。 - paintThumb()方法用来绘制滑块的图片。 - paintDecreaseHighlight()和paintIncreaseHighlight()方法用来绘制减少和增加按钮的图片。 - createDecreaseButton()和createIncreaseButton()方法用来创建减少和增加按钮。 - getMinimumThumbSize()方法用来设置滑块的最小大小。 - getPreferredSize()方法用来设置滚动条的首选大小。 在界面,我们创建了一个JPanel,并将自定义的垂直滚动条添加到了它的东侧。最后,我们将这个面板添加到了JFrame,并显示出来。 注意,上述代码使用的图片必须存在于指定的路径。如果你想使用自己的图片,请将图片文件放在正确的路径下,并在代码修改图片文件的名称和路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值