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(...);
表示列表大小的行数。滚动窗格将是那个大小,如果需要,滚动条将出现。
我有下一部分代码:
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(...);
表示列表大小的行数。滚动窗格将是那个大小,如果需要,滚动条将出现。