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

Java JScrollPane sometimes not successful resized

我有下一部分代码:

    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)

我不知道 "list" 是什么,但假设您使用的是 JList,那么您可以使用:

list.setVisibleRowCount(...);

表示列表大小的行数。滚动窗格将是那个大小,如果需要,滚动条将出现。