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 管理器。

4

6 回答 6

2

据我所知,没有任何 Swing LayoutManager(来自 JRE 或开源)可以跨越多个面板。

我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但实现起来并不容易(我大约 2 周前就开始了,我仍然不知道我是否以及何时会得到一些有趣的东西,但我仍然对它寄予厚望;-))

您可以检查的一个选项是将所有组件添加到同一个面板(然后只有一个 GroupLayout)并根据用户的选择隐藏/显示它们。希望 GroupLayout 能够根据情况调整大小(在调用 pack() 之后)。

如果 GroupLayout 表现良好,那么每次用户更改选择以显示/隐藏扩展字段后,只需调用 pack() 即可。

否则,每次用户更改其选择时,您都必须手动设置面板的大小。

于 2009-01-29T14:35:09.317 回答
1

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

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

于 2009-01-29T13:34:27.037 回答
1

我认为标准布局管理器无法做到这一点。您可能必须编写自己的布局管理器,但如果您将 GroupLayout 子类化,这应该不会太难。

于 2009-01-29T16:13:58.883 回答
0

您可以使用 GridLayout 而不是 GroupLayout 这将为您提供列之间的统一间距

于 2009-01-29T09:56:16.323 回答
0

这是GridLayout的解释。这会将每个组件设置为您期望的大小。使用 GridData 对象,您可以指定组件的排序方式。

例子

替代文字
(来源:sun.com

于 2009-01-29T10:00:29.030 回答
0

如果要将它们保存在具有单独布局的单独面板中:

遍历您添加的所有标签,并找到每个标签的最大首选宽度。第二次迭代,并将首选大小设置为每个标签的首选高度,但最大宽度。

于 2009-01-29T18:16:46.017 回答