一个布局管理器能够生成多个JPanel吗?

3
我需要建立一个包含多个控件的大型表单,这些控件分为基本控件/设置和扩展控件/设置两类。用户可以决定只查看基本控件或同时查看基本和扩展控件。
我已经将所有扩展控件放在它们自己的JPanel中,以便我可以通过显示或隐藏此面板轻松地在两个视图之间切换。
目前我正在使用GroupLayout,但不同面板上的控件未对齐。
Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

不幸的是,我找不到任何方法来“同步”两个面板的布局(除了使用AbsoluteLayout和固定控件坐标)。

  • 有没有办法实现这一点?
  • 我的整个设计是否有缺陷?

编辑:如果可能的话,我想保留GroupLayout管理器。

6个回答

2
据我所知,没有Swing LayoutManager(来自JRE或开源)可以跨越多个面板。
我目前正在为我的DesignGridLayout项目开发这样的功能(我称之为“布局同步”),但这并不是一件容易实现的事情(我大约两周前开始,仍然不确定何时能够得到有趣的东西,但我仍然对此抱有很高的希望;-))。
您可以尝试的一个选项是将所有组件添加到同一个面板上(只使用一个GroupLayout),并根据用户的选择隐藏/显示它们。希望GroupLayout会根据情况自适应大小(在调用pack()之后)。
如果GroupLayout表现良好,那么每次用户更改选择以显示/隐藏扩展字段后,只需要调用pack()即可。
否则,您将不得不在用户更改选择后手动设置面板的大小。

1

可能最简单(最好)的方法是将所有组件添加到主面板中。将子面板设置为非不透明,并将其也添加到主面板中。主面板需要关闭优化绘图。

另一种技术是添加一个间隔组件。在底部面板中添加一个组件,该组件与标签处于同一列,动态地从顶部标签获取其各种尺寸方法的宽度组件。对顶部面板进行相反的操作。


1

我认为使用标准布局管理器无法实现这一点。您可能需要编写自己的布局管理器,但如果您继承GroupLayout,这应该不会太难。


0
你可以使用GridLayout代替GroupLayout,这将为列之间提供均匀的间距。

0
这是 GridLayout 的解释。它将设置每个组件的大小,以符合您的期望。使用 GridData 对象,您可以指定组件的排序方式。 示例 alt text
(来源:sun.com

0
如果您想将它们保留在单独的面板中并具有不同的布局:
遍历您添加的所有标签,并找到每个标签的最大首选宽度。 再次遍历,并将首选大小设置为每个标签的首选高度,但最大宽度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接