提问者:小点点

Java 垂直布局


我无法解决以下两个问题。

问题1

我有一个<code>JScrollPane</code>类型面板,它托管一个<code>JPanel</code<。在程序执行过程中,JPanel接收到越来越多的子面板,因此其高度逐渐增加(使用的是流布局管理器)。我想要而且无法实现的是,当JPanel的内容高于窗口时(由于添加了许多组件),使JScrollPane面板显示垂直滑动条。

到目前为止,我已经设法创建了一些方法,用户可以通过这些方法将子面板添加到< code>JPanel中。但是,当它们变得太多,并且其中一些离开屏幕时,垂直滑动条就不会出现。我怎样才能让他们这样做呢?

请注意,我希望窗口宽度是可重设的。无论何时调整窗口大小,< code>JPanel都应该重新计算其高度,并相应地调整滑块。

问题2

JPanel中,我告诉过您在问题1中我使用的是一个流布局管理器,它以水平线设置组件。然而,我更希望采用垂直布局,它应该将所有组件一个在另一个的正下方添加,而不是像居中布局那样。它们应该是这样的:

O============O
|COMP.1===   |
|COMP.2=     |
|COMP.3===== |
|            |
|            |
O============O

而不是这样的:

O============O
|COMP.1===   |
|            |
|COMP.2=     |
|            |
|COMP.3===== |
O============O

获得此最终处置的最佳布局管理器是什么,同时保持与问题 1 解决方案的兼容性?(这意味着,在添加每个组件后调整 JPanel 的高度时?

提前感谢您的帮助!


共2个答案

匿名用户

我不是摇摆的铁杆用户,但在过去的几个月里,我建议使用MIGLayout。它非常通用,可以让你非常容易地进行布局。学习它需要一点时间,但它会让许多布局问题变得非常容易,例如表单。

您的问题可以通过 MIGLayout 解决:

JScrollPane sp = new JScrollPane();
JPanel panel = new JPanel();
panel.setLayout(new MigLayout("gap rel 0", "grow"));

然后可以像这样添加面板:

panel.add(new JPanel(), "wrap");

匿名用户

但是,我更喜欢垂直配置,它应该将所有组件一个添加到另一个下面,

听起来BoxLayout应该可以解决问题。阅读 Swing 教程中有关使用布局管理器的部分,了解有关所有 Swing 布局的更多信息。

而不是居中的性格。

如果您在对齐方面遇到问题,请不要忘记阅读有关修复对齐问题的部分。