如何使用嵌套的JPanel使JScrollPane正常工作?

时间:2011-03-04 11:34:11

标签: java user-interface swing netbeans jscrollpane

我正在使用NetBeans在Java中构建Swing应用程序,我遇到布局问题。我的主框架包含JScrollPane,其中包含名为JPanel的{​​{1}},contentPanel又包含名为JPanel的{​​{1}}。程序启动时listPanel为空,但当用户与程序交互时,会向其中添加不可预测数量的较小listPanel s。我已经使用NetBeans GUI构建器将JPanel的上边缘捕捉到listPanel的顶部,并将其与底边相同。

我遇到的问题是,当更多组件添加到contentPanel时,垂直滚动条不会显示在我的滚动窗格上。我的滚动窗格的listPanel设置为verticalScrollBarPolicy,其AS_NEEDED设置为viewportView。我认为我需要做的是在contentPanel添加更多项目时使contentPanel增长。

2 个答案:

答案 0 :(得分:3)

  

我遇到的问题是,当更多组件添加到listPanel时,垂直滚动条不会显示在我的滚动窗格上。

当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将显示滚动条。当您动态添加组件时,您需要告诉滚动窗格已更改的内容。所以你的基本代码应该是:

panel.add( subPanel );
panel.revalidate();

或者,因为您要在子面板中添加面板,您可能需要重新验证滚动窗格(我不记得了):

panel.add( subPanel );
scrollPane.revalidate();   

关键是revalidate(),它告诉布局管理器重新计算其大小。

答案 1 :(得分:1)

使用其他LayoutManager。可以像BoxLayout一样实现垂直增长。还要记住,您可以使用多个布局并将它们嵌套在一起,以实现不同的效果。