想变成3列2行的!谢谢大侠!import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class B extends JFrame{ public B(){

GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();

this.getContentPane().setLayout(layout);

JPanel p1 = new JPanel();
p1.setBorder(BorderFactory.createRaisedBevelBorder());
JPanel p11 = new JPanel();
p11.setBorder(BorderFactory.createRaisedBevelBorder());
JPanel p12 = new JPanel();
p12.setBorder(BorderFactory.createRaisedBevelBorder());
p1.setLayout(layout);
c.fill = GridBagConstraints.BOTH;//fill full 
c.weightx = 1;
c.weighty = 8;
//c.gridwidth = GridBagConstraints.RELATIVE;
c.gridwidth = GridBagConstraints.REMAINDER;
p1.add(p11, c);
c.weighty = 6;
p1.add(p12, c);

JPanel p2 = new JPanel();
p2.setLayout(layout);
p2.setBorder(BorderFactory.createLineBorder(Color.black)); //c.weightx = 2;
c.weighty = 2;
c.weightx = 2;
c.gridwidth=GridBagConstraints.RELATIVE;
c.gridwidth=GridBagConstraints.REMAINDER;
this.getContentPane().add(p1, c);
//c.gridheight = GridBagConstraints.REMAINDER;
c.weightx = 3;
this.getContentPane().add(p2, c);
       
JPanel p21 = new JPanel();
p21.setBorder(BorderFactory.createLineBorder(Color.black));
JPanel p22 = new JPanel();
p22.setBorder(BorderFactory.createLineBorder(Color.black));

c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx=1;
c.weighty=3;
p2.add(p21,c);
c.weighty=10;
p2.add(p22,c);


JPanel p3 = new JPanel();
p3.setLayout(layout);
//c.fill = GridBagConstraints.BOTH;
p3.setBorder(BorderFactory.createLineBorder(Color.black));
c.weighty = 1;
c.weightx = 3;
//c.gridwidth = GridBagConstraints.RELATIVE;
c.gridwidth=GridBagConstraints.RELATIVE;
this.getContentPane().add(p2, c);


// c.weightx = 7;
// c.gridwidth = GridBagConstraints.RELATIVE;
// this.getContentPane().add(p1, c);

c.weightx=5;
c.gridwidth = GridBagConstraints.REMAINDER;
this.getContentPane().add(p3, c);
JPanel p31 = new JPanel();
p31.setBorder(BorderFactory.createLineBorder(Color.black));
JPanel p32 = new JPanel();
p32.setBorder(BorderFactory.createLineBorder(Color.black));
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx=1;
c.weighty=3;
p3.add(p31,c);
c.weighty=3;
p3.add(p32,c);



this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.pack();
this.setVisible(true);

}

public static void main(String[] args){
new B();
}

}

解决方案 »

  1.   


    c.weighty = 2; 
    c.weightx = 2; 
    c.gridwidth=GridBagConstraints.RELATIVE; 
    //c.gridwidth=GridBagConstraints.REMAINDER; //这个已经表示第二行结束了,你下面又往第二行第三列加东西?
    this.getContentPane().add(p1, c); 
    //c.gridheight = GridBagConstraints.REMAINDER; 
    c.weightx = 3; 
    this.getContentPane().add(p2, c); 
      

  2.   

    GridBagLayout本质来说是没有行列概念的
    人为炮制的话保证上下对应组件宽度相同 且GridBagConstraints.REMAINDER在每行的第三顺序设置