注释很详细,直接上代码
import java.awt.*;
public class swing_test_5 {
public static void main(String[] args) {
//创建窗口对象
Frame frame =new Frame("示例GridBagLayout");
//创建GridBagLayout对象
GridBagLayout gbl=new GridBagLayout();
//把frame的布局管理器设为GridBagLayout
frame.setLayout(gbl);
//创建GridBagConstraints对象
GridBagConstraints gbc=new GridBagConstraints();
//创建容量为10的Button数组
Button[] bs =new Button[10];
// 遍历数组,初始化每一个Button
for(int i=0;i<bs.length;i++) {
bs[i]=new Button("按钮"+(i+1));
}
// 设置每个GridBagConstraints对象的fill属性为GridBagConstraints.BOTH
//当有空白区域时自动扩大组件占满空白区域
gbc.fill=GridBagConstraints.BOTH;
//往frame中添加数组中的所有Button
//这里是封装了一个方法,可以先看最下面的方法内容
add_Button(frame,gbc,bs[0],0,0,1,1);
add_Button(frame,gbc,bs[1],1,0,1,1);
add_Button(frame,gbc,bs[2],2,0,1,1);
add_Button(frame,gbc,bs[3],3,0,1,1);
add_Button(frame,gbc,bs[4],0,1,4,1);
//像这样高度未拓展的行则需要该行已被坐标为该行的组件拓展,常常使用空白组件拓展
//宽度同理,但一般这个问题都是出现在高度上
add_Button(frame,gbc,bs[5],0,2,2,2);
add_Button(frame,gbc,bs[6],2,2,1,1);
add_Button(frame,gbc,bs[7],3,2,1,1);
add_Button(frame,gbc,bs[8],2,3,1,1);
add_Button(frame,gbc,bs[9],3,3,1,1);
frame.pack();
frame.setVisible(true);
}
//设置起始坐标和横竖扩展比例
//入口只能调用静态的方法
public static void add_Button(Frame frame,GridBagConstraints gbc,Button bs,int x,int y,int dx,int dy){
//设置起始坐标x,y
gbc.gridx=x;
gbc.gridy=y;
//设置拓展长度dx,dy
gbc.gridwidth=dx;
gbc.gridheight=dy;
//设置x,y的权值
gbc.weightx = 1.0;
gbc.weighty = 1.0;
//添加组件
frame.add(bs,gbc);
}
}
运行效果: