2011-05-14 38 views
8

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

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

有什么办法可以将JLabel垂直对齐到右边,这样JTextFields的开头就会对齐吗?谢谢。

+2

这是一个很好的例子['MiGLayout'](http://www.miglayout.com/)中,如果相关性是可以接受的。 – trashgod 2011-05-14 23:19:01

+1

或者jgoodies的'FormLayout' – MeBigFatGuy 2011-05-15 00:01:35

回答

6

有什么办法,以垂直对齐中的JLabel自己的权利,所以,一个是遵循JTextField中的启动会对齐?

1.6+,GroupLayout。例如。从JavaDoc中:

enter image description here

使用的是将文本的RHS上的标签对齐。


另请参阅this answer对于MCVE。

0

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

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

+1

-1,XYLayout不是标准布局,不应该鼓励基于绝对定位的布局管理器,因为它们不是真正的布局管理器。 – camickr 2011-05-15 00:35:41

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

+1,但是当GUI大小调整时,他们很快就会抱怨中间组件聚集在一起。不要忘记重量和重量。 :) – 2011-05-14 23:13:34

+0

这种方法很好地嵌套在GridLayout的每一行中,作为一个'LabelTextPanel'(有一个'GridBagLayout')。 – trashgod 2011-05-14 23:52:13

1

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

+1

但标签和文本字段被强制为相同的大小,通常导致非常丑陋的GUI。我建议不要使用这个。 – 2011-05-14 23:11:58

+1

@Hovercraft是正确的,虽然这可以工作,如果标签和字段是相当的大小和使用@ mkorbel的[答案](http://stackoverflow.com/questions/6005258/how-to-align-jlabel-jtextfield -pairs-垂直/ 6005330#6005330)。 – trashgod 2011-05-14 23:14:22

3

有可能对准里面JTextComponents只是文字与

JLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 
+0

+1另请参阅此[示例](http://stackoverflow.com/questions/3174765/variable-layout-in-swing/3175280#3175280)。 – trashgod 2011-05-14 23:10:59

+0

嗯,这是一样好,如何使用BorderLayout创建10像素的EmptyBorder ...(将JComponents放置在没有任何尺寸的中心位置周围) – mKorbel 2011-05-14 23:25:49

1

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

2

这是一个完美的使用情况DesignGridLayout

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

包含一个很好的JWS演示。 – trashgod 2011-05-15 10:35:19

+0

它不是标准库的一部分 – Murmel 2016-10-12 13:03:34

+0

@ user1885518 OP没有提及它必须是标准库的一部分。 – jfpoilpret 2016-10-29 08:18:08