我必须构建一个包含许多控件的相当大的表单。控件分为基本控件/设置和扩展控件/设置。用户可以决定是否只想查看基本控件或扩展控件。
我已将所有扩展控件放到他们自己的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经理。
答案 0 :(得分:2)
据我所知,没有Swing LayoutManager(来自JRE或开源)可以跨越多个面板。
我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但它并不容易实现(我已经开始大约两周了,我仍然没有'我确切地知道是否以及何时会得到一些有趣的东西,但我仍然对它有很高的期望; - ))
您可以检查的一个选项是将所有组件添加到同一个面板(然后只有一个GroupLayout)并根据用户的选择隐藏/显示它们。希望GroupLayout能够根据情况调整大小(在调用pack()之后)。
如果GroupLayout表现良好,那么每次用户更改其选择以显示/隐藏扩展字段后,只需调用pack()即可。
否则,每次用户更改选择时,您都必须手动设置面板的大小。
答案 1 :(得分:1)
最简单(好)的方法可能是将所有组件添加到主面板。将子面板设置为非不透明,并将其也添加到主面板。需要优化绘图的主面板要关闭。
另一种技术是添加间隔物组分。在底部面板中,在与标签相同的列中添加一个组件,从顶部标签动态获取其各种大小方法的宽度组件。与顶部面板相反。
答案 2 :(得分:1)
我认为使用标准布局管理器无法做到这一点。您可能必须编写自己的布局管理器,但如果您继承GroupLayout,则不应该太难。
答案 3 :(得分:0)
您可以使用GridLayout而不是GroupLayout,这将为您提供列之间的均匀间距
答案 4 :(得分:0)
答案 5 :(得分:0)
如果您想将它们保存在具有不同布局的单独面板中:
迭代您添加的所有标签,并找到每个标签的最大首选宽度。 再次迭代,并将首选大小设置为每个标签的首选高度,但最大宽度。