1. 首先,建layout对象,panel设置为该layout:
GridBagLayout gbl = new GridBagLayout();
panel.setLayout(gbl);
2.设置列和行的参数(数组有多少个元素,也表明了有多少列和行了):
gbl.columnWidths = new int[]{0, 0, 0, 0}; //最小列宽度 gbl.rowHeights = new int[]{0, 0, 0, 0, 0}; //最小行高度
下面是对权重的赋值,权重为1,则随着窗口的大小变化而等比例变化,为0,则该单元格大小不变
gbl.columnWeights = new double[]{0.0, 1.0, 1.0, Double.MIN_VALUE};
gbl.rowWeights = new double[]{1.0, 1.0, 1.0, 0.0, Double.MIN_VALUE};
3.每个单元格里放一个组件(可以放panel,然后放更多的组件上去),对应一个GridBagConstraints,GridBagConstraints相当于是对这个单元格的描述。实际上是没有单元格这个对象的,只有它的描述。
GridBagConstraints gbc = new GridBagConstraints(); panel.add(panel2, gbc); //在panel中增加一个组件panel2,它所处的单元格的描述就是gbc了
因为GridBagConstraints是对单元格的描述,可以想象它怎样去形容一个单元格:(与表格类比)
(1)位置:gridx,gridy
gbc.gridx = 0; gbc.gridy = 0;
(2) 跨度,gridheight,gridwidth
gbc.gridheight = 2; //垂直跨2个单元格
gbc. gridwidth = 2; //水平跨2个单元格
(3)fill 当单元格大于组件时,是否向垂直和水平方向扩展:
gbc.fill = GridBagConstraints.BOTH; //既向垂直也向水平方向扩展
(4)anchor: 当单元格小于组件时,组件应放在单元格的位置,一般是相对位置,也就是你想显示这个组件的哪一部分:
gbc.anchor = GridBagConstraints.NORTHWEST; //西北方,也就是左上角了
(5)insets: 组件与单元格边缘之间间距的最小量,分4个方向:上,左,下,右
gbc.insets = new Insets(0, 0, 0, 5); //离右边缘最小间距为5