为什么JScrollPane在包含JXPanel时不起作用?

时间:2012-10-03 09:56:04

标签: java swing jpanel jscrollpane swingx

我做了一个非常简单的测试用例:

  • 我有一个包含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调整了自身内部组件数量的大小,这不是我想要的行为,我希望滚动窗格保持其固定大小

2 个答案:

答案 0 :(得分:3)

看一下JXPanel的scrollableHeightHint / scrollableWidthHint属性:它的默认是FIT,更改为其中一个模式(填充视口)

答案 1 :(得分:2)

滚动条可能不会显示,因为tracksScrollableHeight内的tracksScrollableWidthJXPanel方法默认返回true。

请参阅this问题中的kleopatra答案。 要记住的关键是将ScrollableSizeHint设置为适用于您的面板的值,在这种情况下,它可能是ScrollableSizeHint.NONE