2011-05-14 37 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