我的意思是JLabel-JTextField对是一个JLabel组件,后面跟着一个JTextField组件,例如“参数1:-----”其中“-----” “表示一个空白的JTextField。如何垂直对齐JLabel-JTextField对
问题是,由于参数名称的长度不同,JLabels的宽度会有所不同,因此JTextField的开头不会垂直对齐。
有什么办法可以将JLabel垂直对齐到右边,这样JTextFields的开头就会对齐吗?谢谢。
我的意思是JLabel-JTextField对是一个JLabel组件,后面跟着一个JTextField组件,例如“参数1:-----”其中“-----” “表示一个空白的JTextField。如何垂直对齐JLabel-JTextField对
问题是,由于参数名称的长度不同,JLabels的宽度会有所不同,因此JTextField的开头不会垂直对齐。
有什么办法可以将JLabel垂直对齐到右边,这样JTextFields的开头就会对齐吗?谢谢。
有什么办法,以垂直对齐中的JLabel自己的权利,所以,一个是遵循JTextField中的启动会对齐?
1.6+,GroupLayout
。例如。从JavaDoc中:
使用的是将文本的RHS上的标签对齐。
另请参阅this answer对于MCVE。
父组件的LayoutManager负责定位包含的元素。也许你需要设置一个XYLayout。
请参阅您的父类的setLayoutManager()。
-1,XYLayout不是标准布局,不应该鼓励基于绝对定位的布局管理器,因为它们不是真正的布局管理器。 – camickr 2011-05-15 00:35:41
您没有指定您使用哪种布局,因此要实现该布局的良好布局应该是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,但是当GUI大小调整时,他们很快就会抱怨中间组件聚集在一起。不要忘记重量和重量。 :) – 2011-05-14 23:13:34
这种方法很好地嵌套在GridLayout的每一行中,作为一个'LabelTextPanel'(有一个'GridBagLayout')。 – trashgod 2011-05-14 23:52:13
我建议GridLayout布局管理器。它提供了最简单的解决方案,以显示标签和文本框控件的成对可视化。因此,您只需在实例化时定义行数和列数,并且添加的控件将由经理处理。
但标签和文本字段被强制为相同的大小,通常导致非常丑陋的GUI。我建议不要使用这个。 – 2011-05-14 23:11:58
@Hovercraft是正确的,虽然这可以工作,如果标签和字段是相当的大小和使用@ mkorbel的[答案](http://stackoverflow.com/questions/6005258/how-to-align-jlabel-jtextfield -pairs-垂直/ 6005330#6005330)。 – trashgod 2011-05-14 23:14:22
或
有可能对准里面JTextComponents只是文字与
JLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
这是我见过良好的解决方案包括使用的GridBagLayout的(如上所述)或MiGLayout,虽然由于后者不是标准Java的一部分,必须在使用之前下载并放置在类路径中。 MiGLayout不是很难使用。
这是一个完美的使用情况DesignGridLayout:
DesignGridLayout layout = new DesignGridLayout(contentPane);
layout.labelAlignment(LabelAlignment.RIGHT);
layout.row().grid(label1).add(field1);
layout.row().grid(label2).add(field2);
...
包含一个很好的JWS演示。 – trashgod 2011-05-15 10:35:19
它不是标准库的一部分 – Murmel 2016-10-12 13:03:34
@ user1885518 OP没有提及它必须是标准库的一部分。 – jfpoilpret 2016-10-29 08:18:08
这是一个很好的例子['MiGLayout'](http://www.miglayout.com/)中,如果相关性是可以接受的。 – trashgod 2011-05-14 23:19:01
或者jgoodies的'FormLayout' – MeBigFatGuy 2011-05-15 00:01:35