如何垂直对齐JLabel-JTextField对

时间:2011-05-14 22:44:09

标签: java swing user-interface alignment

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

问题是,由于参数名称的长度不同,JLabel的宽度会有所不同,因此JTextField的起点不会垂直对齐。

有没有办法将JLabel垂直对齐到右边,以便后面的JTextField的开头会对齐?感谢。

7 个答案:

答案 0 :(得分:6)

您没有指定使用哪种布局,因此要实现的布局是GridBagLayoutdemo in oracle site非常适合开始。

一个简短的例子:

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);

答案 1 :(得分:6)

  

有没有办法将JLabel垂直对齐到右边,以便后面的JTextField的开头会对齐?

1.6 +,GroupLayout。例如。来自JavaDocs:

enter image description here

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


另请参阅this answer了解MCVE。

答案 2 :(得分:3)

可能只需将JTextComponents中的文本与

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

答案 3 :(得分:2)

这是DesignGridLayout的完美用例:

DesignGridLayout layout = new DesignGridLayout(contentPane);
layout.labelAlignment(LabelAlignment.RIGHT);
layout.row().grid(label1).add(field1);
layout.row().grid(label2).add(field2);
...

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

父组件的LayoutManager具有定位所包含元素的责任。也许您需要设置XYLayout。

请参阅父类的setLayoutManager()。