我所说的JLabel-JTextField对是指一个JLabel组件后跟着一个JTextField组件,例如,“参数1: -----”,其中“-----”表示一个空白的JTextField。
问题是,由于参数名称长度不同,JLabel的宽度也会有所不同,因此JTextField的开头在垂直方向上无法对齐。
有没有办法将JLabels垂直对齐到它们的右侧,以便随后跟随的JTextFields的开头对齐?谢谢。
我所说的JLabel-JTextField对是指一个JLabel组件后跟着一个JTextField组件,例如,“参数1: -----”,其中“-----”表示一个空白的JTextField。
问题是,由于参数名称长度不同,JLabel的宽度也会有所不同,因此JTextField的开头在垂直方向上无法对齐。
有没有办法将JLabels垂直对齐到它们的右侧,以便随后跟随的JTextFields的开头对齐?谢谢。
有没有办法将JLabel们垂直对齐到它们的右侧,以使其后跟随的JTextField的开头对齐?
1.6+, GroupLayout
。例如从JavaDocs中:
另请参阅此答案以获取MCVE。
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);
GridLayout
中的每一行中,作为一个 LabelTextPanel
(具有 GridBagLayout
)。 - trashgod或者
在JTextComponents内部,有可能只对齐文本。
JLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
DesignGridLayout layout = new DesignGridLayout(contentPane);
layout.labelAlignment(LabelAlignment.RIGHT);
layout.row().grid(label1).add(field1);
layout.row().grid(label2).add(field2);
...
我看过的好的解决方案包括使用GridBagLayout(如上所述)或MiGLayout,虽然后者不是标准Java的一部分,但必须在使用之前下载并放置在类路径上。 MiGLayout 的使用并不困难。
父组件的LayoutManager负责定位其中包含的元素。也许您需要设置一个XYLayout。
请参见您父类的setLayoutManager()方法。
MiGLayout
是一个很好的选择。 - trashgodjgoodies
中的FormLayout
- MeBigFatGuy