布局管理器可以生成几个JPanels吗?

时间:2009-01-29 09:53:13

标签: java swing netbeans netbeans6.5 layout-manager

我必须构建一个包含许多控件的相当大的表单。控件分为基本控件/设置和扩展控件/设置。用户可以决定是否只想查看基本控件或扩展控件。

我已将所有扩展控件放到他们自己的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 个答案:

答案 0 :(得分:2)

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

我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但它并不容易实现(我已经开始大约两周了,我仍然没有'我确切地知道是否以及何时会得到一些有趣的东西,但我仍然对它有很高的期望; - ))

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

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

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

答案 1 :(得分:1)

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

另一种技术是添加间隔物组分。在底部面板中,在与标签相同的列中添加一个组件,从顶部标签动态获取其各种大小方法的宽度组件。与顶部面板相反。

答案 2 :(得分:1)

我认为使用标准布局管理器无法做到这一点。您可能必须编写自己的布局管理器,但如果您继承GroupLayout,则不应该太难。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

Examples

alt text
(来源:sun.com

答案 5 :(得分:0)

如果您想将它们保存在具有不同布局的单独面板中:

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