我做了一个非常简单的测试用例:
BorderLayout
(panel1)JScrollPane
(scroll1)JScrollPane
包含BoxLayout
上设置PAGE_AXIS
的面板(面板2)然后我将这一小段代码添加到 panel2 中的组件(JLabel
):
for (int i = 0; i < 150; i++) {
panel2.add(new JLabel(String.valueOf(i)));
}
panel2.revalidate();
有效。现在我想使用我制作的自定义面板来扩展SwingX的JXPanel
。所以 panel2 在我的测试用例中看起来像:
public class Panel2 extends JXPanel {
}
它不再起作用了。滚动条不会出现。为什么?在JXPanel
中使用JScrollPane
时有什么特别的事吗?
编辑:
在setScrollableHeightHint(ScrollableSizeHint.NONE);
上使用panel2
后,panel2
调整了自身内部组件数量的大小,这不是我想要的行为,我希望滚动窗格保持其固定大小
答案 0 :(得分:3)
看一下JXPanel的scrollableHeightHint / scrollableWidthHint属性:它的默认是FIT,更改为其中一个模式(填充视口)
答案 1 :(得分:2)
滚动条可能不会显示,因为tracksScrollableHeight
内的tracksScrollableWidth
或JXPanel
方法默认返回true。
请参阅this问题中的kleopatra答案。
要记住的关键是将ScrollableSizeHint
设置为适用于您的面板的值,在这种情况下,它可能是ScrollableSizeHint.NONE