2013-12-23 60 views
0

我正在學習如何使用GridBagLayout。我在JFrame中創建了兩個按鈕。我試圖讓它們中的一個佔據一個collumn(默認值),另外兩個collumns,因此是第一個的兩倍大小(我知道我可以使用setPrefferredSize實現這一點,但我的意圖是學習如何使用gridwidth和gridheight)。關於在Java中使用GridBagLayout

有什麼問題?謝謝

import java.awt.*; 
import javax.swing.*; 

public class Main extends JFrame { 

    Main(){ 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500,500); 

     JPanel panel1 = new JPanel(new GridBagLayout()); 
     JButton b1,b2; 
     b1 = new JButton("button 1"); 
     b2 = new JButton("button 2"); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.gridx = 1; 
     gbc.gridwidth = 1; 
     panel1.add(b1); 
     gbc.gridx = 2; 
     gbc.gridwidth = 2; 
     panel1.add(b2); 

     add(panel1); 

     setVisible(true); 

    } 

    public static void main(String[]args){ 

     Main m = new Main(); 

    } 

} 

回答

0

嘗試使用GridBagConstraint這種方式,希望這會幫助你。

import java.awt.*; 
import javax.swing.*; 

public class Main extends JFrame { 

    Main(){ 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500,500); 

     JPanel panel1 = new JPanel(new GridBagLayout()); 
     JButton b1,b2; 
     b1 = new JButton("button 1"); 
     b2 = new JButton("button 2"); 

     panel1.add(b1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); 
     panel1.add(b2, new GridBagConstraints(1, 0, 1, 1, 2.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); 

     add(panel1); 

     setVisible(true); 

    } 

    public static void main(String[]args){ 

     Main m = new Main(); 

    } 

} 

編輯

或者在你的代碼像下面這樣的變化:

gbc.gridx = 1; 
gbc.gridwidth = 1; 
panel1.add(b1, gbc); 
gbc.gridx = 2; 
gbc.gridwidth = 2; 
gbc.fill = gbc.HORIZONTAL; //set fill property to HORIZONTAL 
gbc.weightx= 2.0; 
panel1.add(b2, gbc); //While adding button also add it with gbc 
1

的問題是,一個GridBagLayout中的所有列不具有相同的寬度。寬度根據它們包含的組件的首選大小計算。所以,你可以使用3,4或100作爲第二個按鈕的網格寬度,它不會改變任何東西。

您需要使用fillx和weightx來改變按鈕的大小調整方式。

2

第二個按鈕的寬度有多少列無關緊要。

實際上,兩個按鈕都會被要求輸入其寬度,如果寬度足夠大,寬度將被設置。

如果空間較小,則使用最小寬度。

如果有額外的空間,它會根據權重比例在控件之間分配。

您可以嘗試爲第一個設置iPadX = 100,並將iPadx設置爲200,並將第一個設爲iPadX = 1,第二個爲iPadx = 2。