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

问题描述 投票:3回答:6

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

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

不幸的是,我找到了“同步”两个面板布局的新方法(除了使用绝对布局和固定控制坐标)

  • 有没有办法实现这个目标?
  • 我的整个设计有缺陷吗?

编辑:如果有可能我想保留GroupLayout经理。

java swing netbeans netbeans6.5 layout-manager
6个回答
2
投票

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

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

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

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

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


1
投票

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

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


1
投票

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


0
投票

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


0
投票

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

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


0
投票

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

Examples

alt text (来源:sun.com

© www.soinside.com 2019 - 2024. All rights reserved.