如何使JLabel-JTextField成对垂直对齐

10

我所说的JLabel-JTextField对是指一个JLabel组件后跟着一个JTextField组件,例如,“参数1: -----”,其中“-----”表示一个空白的JTextField。

问题是,由于参数名称长度不同,JLabel的宽度也会有所不同,因此JTextField的开头在垂直方向上无法对齐。

有没有办法将JLabels垂直对齐到它们的右侧,以便随后跟随的JTextFields的开头对齐?谢谢。


2
如果可以接受依赖关系,那么MiGLayout是一个很好的选择。 - trashgod
1
或者jgoodies中的FormLayout - MeBigFatGuy
7个回答

7

有没有办法将JLabel们垂直对齐到它们的右侧,以使其后跟随的JTextField的开头对齐?

1.6+, GroupLayout。例如从JavaDocs中:

enter image description here

使用将文本推到右侧的标签对齐方式。

另请参阅此答案以获取MCVE。


6
你没有说明使用哪种布局,所以一个好的布局实现方式是 GridBagLayoutOracle 网站上的演示 是一个很好的起点。
以下是一个简短的例子:
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
panel.add(new JLabel("Label 1:"), c);
c.gridx = 1;
c.gridy = 0;
panel.add(new JTextField("TextField 1"), c);
c.gridx = 0;
c.gridy = 1;
panel.add(new JLabel("Label 2:"), c);
c.gridx = 1;
c.gridy = 1;
panel.add(new JTextField("TextField 2"), c);

2
+1,但是当GUI被调整大小时,他们很快就会抱怨组件在中间堆积。别忘了weightx和weighty。 :) - Hovercraft Full Of Eels
这种方法很好地嵌套在一个 GridLayout 中的每一行中,作为一个 LabelTextPanel(具有 GridBagLayout)。 - trashgod

3

或者

在JTextComponents内部,有可能只对齐文本。

JLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

+1 另请参阅此示例 - trashgod
嗯,那很好,就像如何使用BorderLayout创建10像素的EmptyBorder一样...(在中心位置周围放置JComponents而不进行任何大小调整) - mKorbel

2
这是一个完美的使用情况,可以使用DesignGridLayout
DesignGridLayout layout = new DesignGridLayout(contentPane);
layout.labelAlignment(LabelAlignment.RIGHT);
layout.row().grid(label1).add(field1);
layout.row().grid(label2).add(field2);
...

它不是标准库的一部分。 - Murmel
@user1885518并没有提到它必须是标准库的一部分。 - jfpoilpret

1
我建议使用GridLayout布局管理器。它提供了最简单的解决方案,用于显示标签和文本框控件的成对可视化。因此,在实例化时只需定义行数和列数,管理器将处理添加的控件。

1
但标签和文本字段被强制为相同的大小,通常导致非常丑陋的GUI。我建议不要使用这个。 - Hovercraft Full Of Eels
1
@Hovercraft 的想法是正确的,虽然这种方法只在标签和文本字段大小相当,并且和 @mKorbel 的答案一起使用时才行得通。 - trashgod

1

我看过的好的解决方案包括使用GridBagLayout(如上所述)或MiGLayout,虽然后者不是标准Java的一部分,但必须在使用之前下载并放置在类路径上。 MiGLayout 的使用并不困难。


0

父组件的LayoutManager负责定位其中包含的元素。也许您需要设置一个XYLayout。

请参见您父类的setLayoutManager()方法。


1
-1,XYLayout不是标准布局,基于绝对定位的布局管理器不应该被鼓励,因为它们并不是真正的布局管理器。 - camickr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接