【问题标题】:JScrollBar don't show thumb in Nimbus L&FJScrollBar 在 Nimbus L&F 中不显示拇指
【发布时间】: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 swing jlist nimbus jscrollbar


【解决方案1】:

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

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

【讨论】:

  • 谢谢,它有效。我设置了new Dimension(29, 29) 而不是new Dimension(29, 1) 以使拇指更大。
  • 忽略第一条评论,我只是为了放慢速度。 new Dimension(29,29) 是拇指的默认大小(看here)。我也尝试将其设置为这个大小,但是在我将大量新数据添加到我的测试表后,拇指继续消失。我猜是因为我不知道它不能被java“缩小”。但是当我将高度设置为 1 时它对我有用。
  • 我还是又遇到了一些奇怪的事情。在我的另一台电脑上,屏幕为 1900*1000,1 和 29 都不起作用。但是当我将高度设置为大于 35 时,它可以工作。也许这种情况与屏幕尺寸有关,我不确定。无论如何,它现在对我有用。
  • 这似乎是自 1.8.0_60 以来的 known 错误
  • 很好奇 Java 的默认值 Dimension(29,29) 有问题,但Ariloum 的回答对我有用(java 1.8_073-b02 win8.1) .所以他的答案应该被检查为正确的。
【解决方案2】:

你应该试试这个:

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

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多