java布局管理器可以生成几个JPanel吗?
我必须构建一个包含许多控件的相当大的表单。控件分为基本控件/设置和扩展控件/设置。用户可以决定只查看基本控件还是同时查看基本控件和扩展控件
我已经将所有扩展控件放到了它们自己的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管理器
# 1 楼答案
您可以使用GridLayout而不是GroupLayout,这将使列之间的间距均匀
# 2 楼答案
这就是thGridLayout的解释。这会将每个组件设置为您期望的大小。通过GridData对象,可以指定组件的排序方式
Examples
(来源:sun.com)
# 3 楼答案
如果要将它们保存在具有单独布局的单独面板中:
迭代添加的所有标签,并找到每个标签的最大首选宽度。 重复第二次,并将首选大小设置为每个标签的首选高度,但最大宽度
# 4 楼答案
据我所知,任何Swing LayoutManager(来自JRE或开源)都不能跨越多个面板
我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但它并不容易实现(我大约在两周前就开始了,我仍然不知道我是否以及何时会得到一些有趣的东西,但我仍然对它抱有很高的希望;-)
您可以选择的一个选项是将所有组件添加到同一个面板(当时只有一个GroupLayout),并根据用户的选择隐藏/显示它们。希望GroupLayout能够根据情况调整大小(在调用pack()之后)
如果GroupLayout运行良好,那么每次用户更改其选择以显示/隐藏扩展字段后,只需调用pack()
否则,每次用户更改其选择时,您都必须手动设置面板的大小
# 5 楼答案
我认为用标准的布局管理器是无法做到这一点的。您可能需要编写自己的布局管理器,但如果将GroupLayout子类化,应该不会太难
# 6 楼答案
可能最简单(好)的方法是将所有组件添加到主面板。将子面板设置为非不透明,并将子面板也添加到主面板。主面板需要关闭优化图纸
另一种技术是添加间隔组件。在底部面板中,添加一个与标签位于同一列的组件,该组件将从顶部标签动态获取其各种尺寸方法的宽度组件。按与顶部面板相反的顺序进行操作