2016-09-21 35 views
0

我正在嘗試使用GridBagLayout。我需要一個垂直和水平集中的JLabel - 這很容易,我甚至不必創建任何GridBagConstraints。我也想把JButton放在右下角,當我嘗試這樣做時,我居中的面板向左移動或按鈕向上移動。GridBagLayout問題

EXPECTING  GETTING THIS OR THIS 
+-----------+ +-----------+ +-----------+ 
|   | |   | |   | 
|   | |   | |   | 
|   | |   | |   | 
| +---+ | | +---+  | | +---+  | 
| | | | | | |  | | | |  | 
| +---+ | | +---+  | | +---++---+| 
|   | |   | |  | || 
|   | |   | |  +---+| 
|  +---+ |  +---+ |   | 
|  | | |  | | |   | 
+-------+---+ +-------+---+ +-----------+ 

bigPanel = new JPanel(); 
bigPanel.setPreferredSize(new Dimension(320, 640)); 
bigPanel.setLayout(new GridBagLayout()); 

label = new JLabel(); 
label.setPreferredSize(new Dimension(100,95)); 

button = new JButton(); 
button.setPreferredSize(new Dimension(100,25)); 

GridBagConstraints c = new GridBagConstraints(); 

c.anchor = GridBagConstraints.CENTER; 
bigPanel.add(label, c); 

c.anchor = GridBagConstraints.LAST_LINE_END; 
bigPanel.add(button, c); 

我還試圖用它在這裏描述http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html其他方面的限制,但每一次出現問題。

回答

5

anchor如果組件未填充單元,則在其單元內設置組件位置。

您尚未定義佈局的網格。默認行爲是從左向右添加組件。

下面是一個使用GridBagLayout實現您想要的示例的示例。標籤和按鈕放在同一個單元中,填滿面板。

public class Test extends JPanel { 
    public Test() { 
     super(); 
     GridBagLayout gridBagLayout = new GridBagLayout(); 
     gridBagLayout.columnWeights = new double[] { 1.0 }; // expands the 1rst cell of the layout on the vertical axis 
     gridBagLayout.rowWeights = new double[] { 1.0 }; // expands the 1rst cell of the layout on the horizontal axis 
     setLayout(gridBagLayout); 

     JLabel label = new JLabel("test");   
     label.setOpaque(true); 
     label.setBackground(Color.RED); 
     label.setPreferredSize(new Dimension(100, 95)); 
     GridBagConstraints gbc_label = new GridBagConstraints(); 
     gbc_label.gridx = 0; // set label cell (0,0) 
     gbc_label.gridy = 0; 
     gbc_label.insets = new Insets(0, 0, 5, 5); 

     add(label, gbc_label); 

     JButton button = new JButton("button"); 
     GridBagConstraints gbc_button = new GridBagConstraints(); 
     gbc_button.gridx = 0; // set buttoncell (0,0) 
     gbc_button.gridy = 0; 
     gbc_button.anchor = GridBagConstraints.SOUTHEAST; 

     add(button, gbc_button); 
     button.setPreferredSize(new Dimension(100, 25)); 
    } 
}