2011-05-15 97 views
1

我想有結構化的這樣一個3x3的網格佈局:的Java問題使用網格佈局

_ _ _ _ _ _ _ _ _ _ _ _ 
|  Label   | 
| Button Button Button | 
|  TextArea  | 
|_ _ _ _ _ _ _ _ _ _ _ | 

但佈局被打破。

public static void main(String[] args){ 
    JFrame frame = new JFrame("title"); 
    frame.setSize(400,500); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    GridLayout layout = new GridLayout(3,3); 

    JPanel pan0 = new JPanel(); 
    JPanel pan1 = new JPanel(); 
    JPanel pan2 = new JPanel(); 

    pan0.setLayout(layout); 
    GridBagConstraints c = new GridBagConstraints(); 

    JLabel title = new JLabel("title"); 
    title.setFont(new Font("Serif", Font.BOLD, 40)); 
    c.gridx = 0; 
    c.gridy = 0; 
    c.gridwidth = 3; 
    pan0.add(title, c); 

    JButton b1 = new JButton("button1"); 
    c.gridx = 0; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    pan0.add(b1, c); 

    JButton b2 = new JButton("button2"); 
    c.gridx = 1; 
    c.gridy = 2; 
    c.gridwidth = 1; 
    pan0.add(b2, c); 

    JButton b3 = new JButton("button3"); 
    c.gridx = 2; 
    c.gridy = 3; 
    c.gridwidth = 1; 
    pan0.add(b3, c);  

    TextArea text1 = new TextArea(15,40); 
    c.gridx = 2; 
    c.gridy = 0; 
    c.gridwidth = 3; 
    pan0.add(text1, c); 

    frame.add(pan0); 
    frame.pack(); 

    } 
} 
+0

Define'broken'? – forsvarir 2011-05-15 19:42:29

+1

破碎意味着你很困惑GridBagLayout與GridLayout – 2011-05-15 19:47:40

回答

2

你使用GridBagLayout的混亂網格佈局,但我使用的BoxLayout的垂直定位自己,然後也許網格佈局的按鈕。例如,

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

public class Foo003 { 
    private static final int BTN_COUNT = 3; 
    private static final int VERT_GAP = 10; 
    private static final int EB_GAP = 5; 
    private static final float TITLE_SIZE = 36f; 
    private static final String TITLE_TEXT = "This is my Title"; 

    private static void createAndShowUI() { 

     JLabel titleLabel = new JLabel(TITLE_TEXT, SwingConstants.CENTER); 
     titleLabel.setFont(titleLabel.getFont().deriveFont(TITLE_SIZE)); 
     JPanel titlePanel = new JPanel(); 
     titlePanel.add(titleLabel); 

     JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 0)); 
     for (int i = 0; i < BTN_COUNT; i++) { 
     JButton btn = new JButton("Button " + (i + 1)); 
     buttonPanel.add(btn); 
     } 

     JTextArea textArea = new JTextArea(20, 30); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setBorder(BorderFactory.createEmptyBorder(EB_GAP, EB_GAP, EB_GAP, EB_GAP)); 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); 
     mainPanel.add(titlePanel); 
     mainPanel.add(Box.createVerticalStrut(VERT_GAP)); 
     mainPanel.add(buttonPanel); 
     mainPanel.add(Box.createVerticalStrut(VERT_GAP)); 
     mainPanel.add(new JScrollPane(textArea)); 

     JFrame frame = new JFrame("Foo003"); 
     frame.getContentPane().add(mainPanel, BorderLayout.CENTER); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 
+0

解決了,我更瞭解佈局,謝謝! – user573382 2011-05-17 04:47:39

6

您使用的是GridBagConstraintGridLayout

改用GridBagLayout它在同一PAKAGE

3

要添加到棘輪的回答,你也有一些網格位置不正確。試試這個

GridBagLayout layout = new GridBagLayout(); 

    JPanel pan0 = new JPanel(); 
    JPanel pan1 = new JPanel(); 
    JPanel pan2 = new JPanel(); 

    pan0.setLayout(layout); 
    GridBagConstraints c = new GridBagConstraints(); 

    JLabel title = new JLabel("title"); 
    title.setFont(new Font("Serif", Font.BOLD, 40)); 
    c.gridx = 0; 
    c.gridy = 0; 
    c.gridwidth = 3; 
    c.fill = GridBagConstraints.CENTER; 
    pan0.add(title, c); 

    JButton b1 = new JButton("button1"); 
    c.gridx = 0; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    pan0.add(b1, c); 

    JButton b2 = new JButton("button2"); 
    c.gridx = 1; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    pan0.add(b2, c); 

    JButton b3 = new JButton("button3"); 
    c.gridx = 2; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    pan0.add(b3, c);  

    TextArea text1 = new TextArea(15,40); 
    c.gridx = 0; 
    c.gridy = 2; 
    c.gridwidth = 3; 
    c.fill = GridBagConstraints.CENTER; 
    pan0.add(text1, c);