如何垂直对齐 JLabel-JTextField 对

IT小君   2022-01-06T00:10:33

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

问题是,由于参数名称的长度不同,JLabels 的宽度也会发生变化,因此 JTextFields 的开头没有垂直对齐。

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

评论(7)
IT小君

有没有办法将 JLabels 垂直对齐到它们的右边,以便后面的 JTextFields 的开头对齐?

1.6+, GroupLayout来自 JavaDocs 的 EG:

在此处输入图片说明

使用将文本推送到 RHS 的标签对齐方式。


另请参阅此答案以了解 MCVE。

2022-01-06T00:10:34   回复
IT小君

您没有指定使用哪种布局,因此实现该布局的好方法是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);
2022-01-06T00:10:34   回复
IT小君

或者

可以将 JTextComponents 中的文本与

JLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
2022-01-06T00:10:34   回复
IT小君

这是DesignGridLayout的完美用例

DesignGridLayout layout = new DesignGridLayout(contentPane);
layout.labelAlignment(LabelAlignment.RIGHT);
layout.row().grid(label1).add(field1);
layout.row().grid(label2).add(field2);
...
2022-01-06T00:10:34   回复
IT小君

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

2022-01-06T00:10:35   回复
IT小君

我见过的很好的解决方案包括使用 GridBagLayout (如上所述)或MiGLayout,但由于后者不是标准Java的一部分,因此必须在使用前下载并放置在类路径中。MiGLayout 并不难使用。

2022-01-06T00:10:35   回复
IT小君

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

请参阅您的父类的 setLayoutManager()。

2022-01-06T00:10:35   回复