2013-05-01 59 views
2

我正嘗試在MigLayout中創建一個表單。我希望任何文本字段都使用前面的小JLabel進行標記,隨着空間可用,文本字段會不斷增大。我能夠成功地做到這一點在下面的代碼:防止JLabel在MigLayout中增長

JFrame frame = new JFrame("Test"); 
JPanel panel = new JPanel(new MigLayout("", "fill", "")); 
panel.add(new JLabel("Testing")); 
panel.add(new JTextField(), "growx, pushx, wrap"); 
frame.setContentPane(panel); 
frame.pack(); 
frame.setMinimumSize(new Dimension(400, 100)); 
frame.setPreferredSize(new Dimension(400, 100)); 
frame.setVisible(true); 

結果看起來是這樣的,這是因爲預期(選擇JLabel是最小必要大小,JTextField的佔用面積的其餘部分):

enter image description here

但是,如果我把低於這個JEditorPane中,並將它跨越了整個窗口的長度,選擇JLabel變大,如果我放大窗口增長。代碼變化如下:

... 
panel.add(new JTextField(), "growx, pushx, wrap"); 
//New line of code here: 
panel.add(new JEditorPane(), "growx, pushx, span"); 
frame.setContentPane(panel); 
... 

導致我不指望一個結果(JLabel的增長):

enter image description here

我已經嘗試通過增加MigLayout參數來解決這個問題對於JLabel,如"growx 0""shrink",但這似乎對標籤的大小沒有任何影響。

如何防止JLabel在這種情況下增長?

+0

你嘗試過「W分鐘」? – 2013-05-01 05:13:37

+0

我有,但我更喜歡一個不需要我硬編碼大小的答案。 – Thunderforge 2013-05-01 19:42:18

回答

4

我想通了!問題是與上JEditorPane中的參數:

panel.add(new JEditorPane(), "growx, pushx, span"); 

事實證明,使用span時,growx, pushx是不必要的(因爲它已經在尺寸上生長),並在與此一起使用時,它創建上面顯示的效果。我的猜測是,growx適用於標記爲span的所有單元格,但pushx僅適用於第一個單元格。

所以span使組件佔用多個單元,它們都被賦予了默認權重growx,但pushx只會使第一個單元增長。

所以修復線的正確方法就是:

panel.add(new JEditorPane(), "span");