2017-07-05 331 views
0

我對某些按鈕和麪板有問題。我使用GridBagLayout 6x1創建了一個JPanel。JPanel中的JButton佔用太多空間

 GraphicPaintedPanel deck = new GraphicPaintedPanel(); 
     GridBagLayout gblDecks = new GridBagLayout();            
     gblDecks.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0}; 
     gblDecks.rowHeights = new int[]{0, 0}; 
     gblDecks.columnWeights = new double[]{0.15, 0.15, 0.15, 0.15, 0.15, 0.15, Double.MIN_VALUE}; 
     gblDecks.rowWeights = new double[]{1.0, Double.MIN_VALUE}; 
     deck.setLayout(gblDecks); 

問題是當我嘗試基於自己是多少,因爲他們需要的空間按鈕添加到這個面板,即使壽他們應該有固定的大小。例如,如果我做

  for(int j=0; j<4; j++){ 
      JButton activate= new JButton("ACTIVATE LEADER CARD"); 
      GridBagConstraints gbcActivate = new GridBagConstraints(); 
      gbcActivate.gridx = j; 
      gbcActivate.fill = GridBagConstraints.BOTH; 
      deck.add(activate, gbcActivate); 
      } 

我創建4個按鈕,面板應該有4個按鈕和2個「空白空間」。但相反,它有4個按鈕,它們佔據了所有可能的空間。 enter image description here

,如果我做

  for(int j=0; j<6; j++){ 
      JButton activate= new JButton("ACTIVATE LEADER CARD"); 
      GridBagConstraints gbcActivate = new GridBagConstraints(); 
      gbcActivate.gridx = j; 
      gbcActivate.fill = GridBagConstraints.BOTH; 
      deck.add(activate, gbcActivate); 
      } 

我得到這個代替enter image description here

不應該的尺寸是固定的?誰能幫我?

+3

因爲我沒有[mcve]從你進行測試,請告訴我如果刪除此行會發生什麼情況:'gbcActivate.fill = GridBagConstraints.BOTH;'? – Frakcool

+1

@Frakcool說的是什麼。 –

+1

閱讀Swing教程中有關[如何使用GridBagLayout]的部分(http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html),瞭解每個約束的用途。您還可以使用更簡單的佈局管理器,如「FlowLayout」。 – camickr

回答

1

gbcActivate.fill = GridBagConstraints.BOTH

如果我們去tutorial它說:

填寫
當組件的顯示區域大於組件的所需大小,以確定是否以及如何調整零件。有效值(定義爲GridBagConstraints常量)包括NONE(默認值),HORIZONTAL(使組件的寬度足以在水平方向上填充其顯示區域,但不改變其高度),VERTICAL(使組件的高度足以垂直填充其顯示區域,但不要改變其寬度),和BOTH(使組件完全填充其顯示區域)。

因此,這將填補顯示區域independtly你指定columnWeights什麼,等嘗試刪除它或改變它GridBagConstraints.NONE

或在評論上述建議,使用另一個layout manager這樣as FlowLayout