跨面板对齐Swing组件

时间:2010-09-21 14:24:25

标签: java swing layout alignment jgoodies

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

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

但是我们当然希望所有标签都能独立对齐它们所属的子面板。

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

我们不能松开JPanel,因为我们必须在组件组之间设置边框

5 个答案:

答案 0 :(得分:7)

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

但是如果你想在多个编辑器或表单中对齐,上述技术就会失败。 JGoodies FormLayout提供了两个级别来解决这个问题,更普遍的是提高布局的一致性:1)大小的下限,2)布局变量。

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

2)超越方法1)。并且动机是从多种形式中提取100px。在FormLayout中,您可以设置布局变量,例如$ label,您配置为“[100px,pref]”或“right:[75dlu,pref]”等。如果您在所有编辑器中使用布局变量,这些将是一致且您只有一个地方可以为所有编辑者配置所有标签列。

答案 1 :(得分:4)

没有简单的方法可以做到我所知道的。你的选择:

  • 使用该功能编写您自己的布局管理器(或扩展现有布局管理器)
  • 固定列宽
  • 确定按边框视觉分隔的面板不需要在所有
  • 之后对齐其内容

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我已经阅读了有关使用JSeparator而不是带边框的多个JPanel的建议,如果对齐小部件是您的首选。

JSeparator提供了分组小部件的视觉效果,但它们本身只是适合同一JPanel的另一个简单小部件。阅读教程,了解重要提示,例如设置首选大小。 http://download.oracle.com/javase/tutorial/uiswing/components/separator.html

另外,Apple目前的指导方针建议只使用空格作为分组之间的分隔符,作为边框和分隔符的替代方法。

答案 4 :(得分:0)

此示例代码可以帮助您解决对齐问题:

//c is instance of the content pane
c.setLayout(gl=new GridLayout(3,0));
//jp is a jpanel. I took this panel because there is no alignment
//setting for a specifiq cell of grid Layout.
jp.setAlignmentX(CENTER_ALIGNMENT);
//jl is the jLabel
jp.add(jl);
//finally I add that with the frame
c.add(jp);

希望它能帮助您解决问题。

相关问题