6

我们有一个 JPanel,其中包含多个 JPanel,其中包含 JComponents(比如说 JLabels 和 JTextboxes)

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

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

如果不固定包含 JLabels 的列的宽度,我们怎么能做到这一点?

我们不能松开 JPanel,因为我们必须在组件组周围设置边框。

4

5 回答 5

7

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

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

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

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

于 2012-06-01T08:41:20.860 回答
4

我知道没有简单的方法可以做到这一点。您的选择:

  • 使用该功能编写您自己的布局管理器(或扩展现有的)
  • 固定列宽
  • 确定在视觉上被边框分隔的面板不需要对齐它们的内容
于 2010-09-21T14:32:11.283 回答
2

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

于 2010-09-21T14:37:31.087 回答
1

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

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

此外,Apple 当前的指导方针建议简单地使用空白作为分组之间的分隔符,作为边框和分隔符的替代方案。

于 2011-06-26T00:34:58.523 回答
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);

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

于 2012-08-08T05:09:58.777 回答