Java JScrollPane 有时无法成功调整大小

标签 java swing synchronize

我有下一部分代码:

    final JList<String> list = new JList<String>(strings);
    list.setLayoutOrientation(JList.VERTICAL);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    /* Create scroll pane instance */
    JScrollPane scroll = new JScrollPane(list) {
         @Override
         public Dimension getPreferredSize()
         {
             BookFrame frame = BookFrame.instance();

             Container parent = getParent();

             return new Dimension(frame.getWidth(), parent.getHeight() - parent.getComponent(parent.getComponentCount() - 1).getHeight() - 14);
         }
    };

    /* Create button instance */
    JButton button = new JButton("Add Directory");

    /* Add new panel */
    JPanel panel = new JPanel();
    panel.add(scroll);
    panel.add(button);

此代码在程序启动时运行,有时按钮高度是正常值(例如 15),但有时是 0。我认为问题出在 JScrollPane 实例上 - 它是在 JButton 实例之前创建的 - 但我无法同步。我还尝试在 JScrollPane scroll = ... 之前添加 JButton button = ... 但它也不起作用。

我是 Java 新手,所以请告诉我我做错了什么。

最佳答案

我看不出有任何理由需要重写 getPreferredSize() 方法。我猜这就是问题所在。

JScrollPane scroll = new JScrollPane(list)

我不知道“列表”是什么,但假设您使用的是 JList 那么您可以使用:

list.setVisibleRowCount(...);

表示列表大小的行数。然后,滚动 Pane 将具有该大小,并且如果需要,将出现滚动条。

关于Java JScrollPane 有时无法成功调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800309/

相关文章:

java - 可以在 Java 中绘制 YCbCr 吗?

java - 操作栏拉伸(stretch)选项卡

java - PaintComponent() 的最佳实践

java - 从不同线程更新对象

database - 为数据库创建数据补丁(同步数据库)

java - 关于框架(概念)

java - 如何使用 Gson 序列化 Optional<T> 类?

java - 如何保持 Swing 组件更新

java - 如何合并JTable的两列

php - 同步本地数据库和现场数据库