我的意思是JLabel-JTextField对是一个JLabel组件,后跟一个JTextField组件,例如“参数1:-----”,其中“-----”表示空白的JTextField。
问题是,由于参数名称的长度不同,JLabel的宽度会有所不同,因此JTextField的起点不会垂直对齐。
有没有办法将JLabel垂直对齐到右边,以便后面的JTextField的开头会对齐?感谢。
答案 0 :(得分:6)
您没有指定使用哪种布局,因此要实现的布局是GridBagLayout。 demo 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:
使用将文本推送到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()。