GridBagLayout 例

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.*;


public class Layout2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Layout2Frame().setVisible(true);

    }

}
class Layout2Frame extends JFrame {
    Layout2Frame(){
        this.setTitle("Layout2 Test");
        this.setSize(800,800);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel jp = new JPanel();
        jp.setLayout(new GridBagLayout());
        
        jp.add(new JScrollPane(new JTextArea(1,5)),new Constraint(0,0,1,3));
        
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(2,1));
        p1.setBorder(BorderFactory.createEtchedBorder());
        p1.add(new JLabel("标  签"));
        p1.add(new JTextField(5));
        
        jp.add(p1,new Constraint(3,0));
        jp.add(new MPanel2(),new Constraint(4,0,1,2));
        jp.add(new MPanel2(),new Constraint(6,0,1,1));
        
        
        JPanel p2 = new JPanel();
        p2.setLayout(new GridLayout(2,1));
        p2.setBorder(BorderFactory.createEtchedBorder());
        p2.add(new JButton("按钮"));
        p2.add(new JButton("按钮"));
        
        
        jp.add(p2,new Constraint(0,1));
        jp.add(new MPanel2(),new Constraint(1,1));
        jp.add(new MPanel2(),new Constraint(2,1));
        jp.add(new JScrollPane(new JTextArea(1,5)),new Constraint(3,1));
        MPanel2 mp = new MPanel2();
        /*mp.add(new JButton("hellp"));
        mp.add(new JButton("hellp"));
        mp.add(new JButton("hellp"));
        mp.add(new JButton("hellp"));*/
        
        jp.add(mp,new Constraint(4,1));
        jp.add(new MPanel2(),new Constraint(5,1));
        jp.add(new MPanel2(),new Constraint(6,1));
        
        
        
        add(jp);
        
    }
}
class MPanel2 extends JPanel {
    MPanel2(){
        /*Dimension d = new Dimension(100,100);
        //this.setPreferredSize(new Dimension(60,60));
        this.setMaximumSize(d);
        this.setMinimumSize(d);*/
        add(new JLabel("面板"));
        
        this.setBorder(BorderFactory.createEtchedBorder());
    }
}
class Constraint extends GridBagConstraints {
    Constraint(int gridx,int gridy) {
        
        this.gridx = gridx;  //gridx,gridy 指表格坐标.指此物件的开始位置在(x,y)处,也即在 x列,y行处 ,x,y 都从0开始.
        this.gridy = gridy;
        this.setFill(Constraint.BOTH); //默认物作是居中的.设成both后如果物件比所占area小就会在横竖两个方向拉伸
        //this.setWeight(100, 100);//空白区域怎么分配.
        this.setInsets(1);//边界
    }
    Constraint(int gridx,int gridy,int gridheight,int gridwidth) {
        this(gridx,gridy);    //高和宽指物件占用的空间 , 四个参数可理解 了 ,x,y,dy,dx
        this.gridheight = gridheight;
        this.gridwidth = gridwidth;
    }
    public Constraint setFill(int fill) {
        this.fill = fill;
        return this;
    }
    public Constraint setAnchor(int anchor) {
        this.anchor = anchor; //是指物件放在所在区域的什么位置,默认是center CENTER, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, 
        //and NORTHWEST. The relative values are: PAGE_START, PAGE_END, LINE_START, LINE_END, FIRST_LINE_START, FIRST_LINE_END, LAST_LINE_START and LAST_LINE_END. The default value is CENTER
        return this;
    }
    public Constraint setWeight(double weightx,double weighty) {
        this.weightx = weightx;
        this.weighty = weighty;
        return this;
    }
    public Constraint setInsets(int distance){
        this.insets = new Insets(distance,distance,distance,distance);
        return this;
    }
}
原文地址:https://www.cnblogs.com/qqjue/p/2620840.html