我正在使用NetBeans在Java中构建Swing应用程序,但是布局存在问题。我的主框架包含一个JScrollPane,其中包含一个称为JPanelcontentPanel,而该列表又包含一个称为JPanellistPanel。程序启动时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(),它告诉布局管理器重新计算其大小。

10-02 11:14