【发布时间】:2015-09-30 03:39:34
【问题描述】:
我遇到了一个仅在 Nimbus L&F 上发生的问题。如果 JList 中的项太多,则 JScrollBar 的 thumb 会消失。但是在金属 L&F 中,拇指总是可见的,因为它有一个最小尺寸。我还检查了 Nimbus L&F 中的逻辑,确实有相同的最小尺寸。但它没有影响。
请看我下面的代码:
public static void main(String[] args) {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
UIManager.setLookAndFeel(info.getClassName());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
}
JFrame f = new JFrame("Metal (height 300)");
String[] ss = new String[100];
for (int i = 0; i < ss.length; i++) {
ss[i] = "" + i;
}
JList<String> l = new JList<String>();
l.setListData(ss);
final JScrollPane jScrollPane = new JScrollPane(l);
f.getContentPane().add(jScrollPane);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
f.setVisible(true);
}
当我设置“f.setSize(300, 300);”时,拇指会消失。
但如果我设置“f.setSize(300, 400);”,拇指将是可见的。
如何设置拇指始终可见?
【问题讨论】:
-
我觉得没问题。您使用的是什么版本的 Java?您是否尝试过在 EDT (Initial Threads) 的上下文中初始化 UI?你有两个屏幕的屏幕截图吗?
-
我已经尝试在 EDT 线程中运行这个演示,问题存在。谢谢!
-
我运行的是 Windows 7/Java 8 并且没有问题,可能是与 Windows 8 相关的问题...
-
这很奇怪。我用JDK1.8.0_60在Win7/8上测试过。但是他们都有这个问题。它只发生在 Nimbus L&F 下,金属没问题。当您降低框架的高度时,当有足够的空间显示拇指时,拇指会消失。
标签: java swing jlist nimbus jscrollbar