我正在使用NetBeans在Java中构建Swing应用程序,但是布局存在问题。我的主框架包含一个JScrollPane
,其中包含一个称为JPanel
的contentPanel
,而该列表又包含一个称为JPanel
的listPanel
。程序启动时listPanel
为空,但是当用户与程序交互时,会向其中添加不可预测的较小JPanel
。我已经使用NetBeans GUI生成器将listPanel
的顶部边缘对齐到contentPanel
的顶部,底部边缘也是如此。
我的问题是,当更多组件添加到listPanel
中时,垂直滚动条不会出现在我的滚动窗格中。我的滚动窗格的verticalScrollBarPolicy
设置为AS_NEEDED
,其viewportView
设置为contentPanel
。我想我需要做的是,当将更多项目添加到contentPanel
中时,使listPanel
增长。
最佳答案
我的问题是,当更多组件添加到listPanel时,垂直滚动条不会出现在我的滚动窗格中。
当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将显示滚动条。动态添加组件时,您需要告诉滚动窗格某些更改。因此,您的基本代码应为:
panel.add( subPanel );
panel.revalidate();
或者,因为要将面板添加到子面板,所以可能需要重新验证滚动窗格(我不记得了):
panel.add( subPanel );
scrollPane.revalidate();
关键是revalidate(),它告诉布局管理器重新计算其大小。