Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane有时无法成功调整大小_Java_Swing_Synchronize - Fatal编程技术网

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

Java JScrollPane有时无法成功调整大小,java,swing,synchronize,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 sc

我有代码的下一部分:

    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);
最终JList列表=新JList(字符串);
list.setLayoutOrientation(JList.VERTICAL);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
/*创建滚动窗格实例*/
JScrollPane scroll=新的JScrollPane(列表){
@凌驾
公共维度getPreferredSize()
{
BookFrame=BookFrame.instance();
容器父级=getParent();
返回新维度(frame.getWidth(),parent.getHeight()-parent.getComponent(parent.getComponentCount()-1.getHeight()-14);
}
};
/*创建按钮实例*/
JButton按钮=新JButton(“添加目录”);
/*添加新面板*/
JPanel面板=新的JPanel();
面板。添加(滚动);
面板。添加(按钮);
此代码在程序启动时运行,有时按钮高度为正常值(例如15),但有时为0。我认为问题在于JScrollPane实例——它是在JButton实例之前创建的——但我无法同步。我还尝试在
JScrollPane scroll=…
之前添加
JButton button=…
,但它也不起作用


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

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

JScrollPane scroll = new JScrollPane(list)
我不知道“列表”是什么,但假设您使用的是JList,则可以使用:

list.setVisibleRowCount(...);

指示列表大小对应的行数。然后,滚动窗格将显示该大小,如果需要,将显示滚动条。

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

JScrollPane scroll = new JScrollPane(list)
我不知道“列表”是什么,但假设您使用的是JList,则可以使用:

list.setVisibleRowCount(...);

指示列表大小对应的行数。然后,滚动窗格将达到该大小,如果需要,将显示滚动条。

但是如何动态调整我的
JScrollPane
?如何使用
setVisibleRowCount(…)
?@ventaquil,添加到JFrame中心的任何组件都会随着帧大小的调整而动态调整大小。setVisibleRowCount()是使用pack()方法时的建议。有关更多信息和工作示例,请阅读上Swing教程的部分。下载theokay-问题在于
JPanel
。当我添加scroll by
getContentPane().add(…)
method
setVisibleRowCount(…)
工作正常。谢谢:)但是如何动态调整我的
JScrollPane
?如何使用
setVisibleRowCount(…)
?@ventaquil,添加到JFrame中心的任何组件都会随着帧大小的调整而动态调整大小。setVisibleRowCount()是使用pack()方法时的建议。有关更多信息和工作示例,请阅读上Swing教程的部分。下载theokay-问题在于
JPanel
。当我添加scroll by
getContentPane().add(…)
method
setVisibleRowCount(…)
工作正常。谢谢:)