跨面板对齐Swing组件

Jen*_*der 6 java layout swing alignment jgoodies

我们有一个JPanel,它包含多个包含JComponents的JPanel(让我们说JLabels和JTextboxes)

在每个内部JPanel内部,我们使用JGoodies Layout来确保所有标签的正确对齐.

但是,我们当然希望所有标签在它们所属的子面板上独立对齐.

如果不修复包含JLabels的列的宽度,我们怎么能这样做呢?

我们不能放弃JPanels,因为我们必须围绕组件组拥有边框

小智 7

我建议支持平面布局而不是嵌套布局.在单一布局中,对齐很容易.避免使用TitledBorders并用标题分隔符,分隔符或仅白色空格替换它们.这对绝大多数编辑和表格都有帮助.

但是,如果要跨多个编辑器或表单进行对齐,则上述技术将失败.JGoodies FormLayout提供了两个级别来解决这个问题,更一般地说是提高布局的一致性:1)大小的下限,2)布局变量.

使用1),您可以描述确保跨表单的最小宽度的布局.例如,如果要说所有标签列的宽度至少为100px,则可以为标签列说"[100px,pref]".

2)超越方法1).并且动机是从多种形式中提取100px.在你的FormLayout可以设置布局变量,例如$标签,该标签将您配置为"[100像素,PREF]"或"右:75dlu,PREF]",等等.如果你使用你所有的编辑器布局变量,这将是一致且您有一个地方可以为所有编辑器配置所有标签列.


Tom*_*ine 2

仅仅因为JPanels 有边界,并不意味着它们实际上需要包含其明显的内容。将面板设置为透明。将面板和组件添加到封闭面板中。添加间隔组件以模仿布局中面板的插入。对于重叠组件,您还需要关闭“优化绘图”或类似功能。

  • 嗯,这可能有用 - 但我怀疑当边界与它们应该包围的组件不匹配时,它会在各种极端情况下导致很多令人头痛的问题。 (2认同)