2012-04-26 90 views
1

這是我已經奠定了使用的GridBagLayout:GridBagLayout的調整組件

normal layout

但是,當我選擇一對夫婦的標籤都應該是填充的文件。這是什麼樣子後,我讓使用這些小的「...」按鈕,文件選擇:

messed layout

正如你可以看到,整個佈局被搞砸。所有我在做ActionListener的是這樣的:

  fileTxt = fileChooser.getSelectedFile(); 
      fileTxtField.setText(fileTxt.getAbsolutePath()); 
      labels = getLabels(); 
      lbl1.setText(labels[0].toUpperCase()); 
      Dimension size = lbl1.getPreferredSize(); 
      lbl1.setMinimumSize(size); 
      lbl1.setPreferredSize(size); 
      lbl2.setText(labels[1]); 
      lbl2.setToolTipText(longLbl); 
      size = lbl2.getPreferredSize(); 
      lbl2.setMinimumSize(size); 
      lbl2.setPreferredSize(size); 
      button1.setPreferredSize(new Dimension(20,25)); 
      button2.setPreferredSize(new Dimension(20,25)); 

所以,基本上,按鈕將它們的原始大小,並且打亂了整個佈局不理想sizes.and。我該如何解決?所有組件都設置爲不填充gridBagConstraints.fill的gridbagconstraint設置爲GridBagConstraints.NONE - 然而,佈局仍然被搞砸:(

UPDATE

按照你的建議,我刪除了代碼這是調用了setPreferredSize()方法,這是我所得到的:

enter image description here

顯然,這是我想避免的東西 - 一個按鈕,比其文字變大,這是原因設置了setPreferredSize在按鈕上。現在我該怎麼辦?

+0

爲什麼需要重置尺寸。您可以在創建佈局時將其設置爲不可見,並使其在動作偵聽器中可見。此外,網格包似乎沒有正確設置,因爲除標籤之外的組件都會彈出正常網格。您應該爲組件設置網格包常量。它提供了一個更對齊的佈局(網格佈局的目的) – 2012-04-26 08:14:48

+0

1)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 2)最好在構造函數中爲文本字段提供一個大小。 3)一定要在容器上調用'pack()'。 4)佈局有時會尊重組件的首選大小,而其他時間則不然。 5)這看起來很適合['GroupLayout'](http://docs.oracle.com/javase/7/docs/api/javax/swing/GroupLayout.html)。 – 2012-04-26 08:35:35

+0

@NitinChhajer添加了更新 – Jay 2012-04-26 19:20:57

回答

3

有一個簡單的解決方案。按鈕的額外寬度取決於按鈕文本左側和右側的默認margins。默認情況下,它是14

你可以設置btn.setMargin(new Insets(2, 0, 2, 0));和那個額外的差距。

5

不要撥打setPreferredSize()。讓LayoutManager這樣做。

在你的GridBagConstraints定義fillweightx參數來定義應該如何分配額外的空間。

+0

+1更多[here](http://stackoverflow.com/q/7229226/230513)。 – trashgod 2012-04-26 11:30:21

+0

儘管這個答案幫助我擺脫了setPrefferredSize方法,但Nitin的答案正確地解決了我的UI問題。因此,我對此表示贊同,並授予尼廷的答案。 – Jay 2012-04-26 21:51:48