JScrollBar在Nimbus L& F中没有显示拇指

时间:2015-09-30 03:39:35

标签: java swing jlist nimbus jscrollbar

我遇到的问题只发生在Nimbus L& F上。如果JList中的项太多,JScrollBar的拇指将消失。但是在金属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);”时,拇指将消失。

enter image description here

但如果我设置“f.setSize(300,400);”,则拇指将可见。

enter image description here

如何设置拇指始终可见?

enter image description here

2 个答案:

答案 0 :(得分:2)

尝试将拇指的最小尺寸设置为1

getDefaults().put("ScrollBar.minimumThumbSize", new Dimension(29, 1));

答案 1 :(得分:2)

你应该试试这个:

UIManager.getLookAndFeelDefaults().put("ScrollBar.minimumThumbSize", new Dimension(30, 30));