更改JScrollBar拇指大小?
我在我的框架上有一个JScrollBar,而不是在ScrollFrame中,并且滚动条旋钮/滑动条非常薄。我尝试更改滚动条的属性,并试图制作自定义的JScrollBar组件,但我无法找到更改滚动条旋钮大小的方法。任何帮助非常感谢,谢谢!更改JScrollBar拇指大小?
让layout manager和look & feel做这项工作。此示例在框架内容窗格的BorderLayout.SOUTH
区域中显示NimbusLookAndFeel
滚动条。注意如何pack()
导致酒吧采用*面板的宽度和由L & F.
附录中定义的首选高度:滚动条的拇指的实际绘画由ScrollBarUI
实施paintThumb()
对于给定Look & Feel处理。您可以替换您自己的或使用third party variation。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.UIManager;
/**
* @see http://*.com/a/22766340/230513
*/
public class Test {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(240, 120);
}
});
f.add(new JScrollBar(JScrollBar.HORIZONTAL), BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().display();
}
});
}
}
正确使用setVisibleAmount
会解决这个目的。
众所周知,拇指大小表示底层内容的可见量。例如对于水平滚动条,如果50%的内容可见,则缩略图宽度为其轨道宽度的50%。
在JScrollBar
情况下,visibleAmount
的默认值设置为10。拇指的大小正比于比visibleAmount/(maximum - minimum)
。
虽然这会破坏默认体验。
我希望这回答了这个问题。
这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 –
感谢@Alexis的评论。增加了一些更多的解释。 – kujeensiti
有点晚了,但仍然有些人可能也需要。 我前几天也有这个问题,所以我检查了JScrollBar
类和BasicScrollBarUI
。
有一个固定的大小拇指所有你需要做的就是在使用前加入这一行/宣称任何JScrollBar
:
UIManager.put("ScrollBar.minimumThumbSize", new Dimension(wanted_width, wanted_height));
强制拇指永远也不能低于希望的大小。
ScrollBar.maximumThumbSize
是UIManager
属性键
请你阅读offcial甲骨文教程如何当你说'“并滚动旋钮/滑块是真的瘦了”',这是一个水平滚动条或垂直使用scrollpanes – mKorbel
一?我问的原因是,当我听到“瘦”的时候,我把它等同于从左到右的宽度。因此,宽水平滚动拇指表示没有太多滚动可用,而细水平拇指表示有很多滚动可用。这恕我直言不应该改变,因为它给用户一个可用的滚动量的视觉指示。如果您指的是垂直滚动滑块/拇指的宽度,那么这就是另一个故事。 – splungebob
对不起,不清楚。我的意思是我有一个这样的滚动条: '([])' 但我想要一个像这样的滚动条: '( [])' –