一、介绍
由GridBagLayout类实现的布局管理器称为网格组布局管理器,它实现了一个动态的矩形网格,这个矩形网格由无数个矩形单元格组成,每个组件可以占用一个或多个这样的单元格。
二、属性
(1)gridx和gridy
gridx==>x轴索引值,代表水平,gridy==>y轴索引值,代表垂直
(2)gridwidth和gridheight
gridheight==》组件占据行数,gridwidth==》组件占据列数
(3)anchor
anchor属性用来设置组件在其所显示区域的显示位置 通常将显示区域从方向上划分为9个方位,北方(NORTH)、东北(NORTHEAST)、南方(SOUTH)、 西南(SOUTHWEST)、西方(WEST)、西北(NORTHWEST)、东方(EAST)、东南(EASTSOUTH)和中心(CENTER) 可以利用这9个静态常量设置anchor属性,其中常量CENTER为默认位置
(4)fill
fill属性,设置组件的填充方式, 设置静态常量为NONE,为不调整组件大小至填满显示区域 设置静态常量为HORIZONTAL==》表示只调整组件水平方向的大小(即组件宽度)填满显示区域 设置静态常量为VERTICAL==》表示只调整组件垂直方向的大小(即组件高度)填满显示区域 设置静态常量为BOTH,则表示同时调整组件的宽度和高度至填满显示区域
(5)insets
设置组件最左侧的最小距离,insets为设置组件四周与单元格边缘之间的距离 Insets类仅有一个构造方法Insets(int top,int left,int bottom,int right)这四个入口参数 依次为组件上方、左侧、下方和右侧的最小距离,单位为像素
(6)ipadx和ipady
ipadx用来修改组件的宽度,ipady用来修改组件的高度
(7)weigthx和weigthy
weightx属性,是用来设置其所在列对额外空间的分布方式, 如果该列中含多个weightx属性,则取它们的最大值为该列的分布方式; weighty属性,是用来设置其所在行对额外空间的分布方式, 如果该列中含多个weightx属性,则取它们的最大值为该列的分布方式。
三、程序代码(利用网格组布布局管理器管理组件,并使用GridBagConstraints类中所用来设置组件布局信息的属性)
import javax.swing.*;
import java.awt.*;
import java.awt.GridBagConstraints;
//网格组布局管理器
public class GridBagExamplee extends JFrame {
public GridBagExamplee() {
//final可以用于声明变量,一旦变量被设定之后,就不可再改变变量的值,final定义的类不可继承
//使用final声明变量
final JButton button = new JButton("A");
/*
GridBagConstraints===》可以设置组件的布局信息,
如组件在网格组中位于第几行、第几列,以及需占用几行几列等。
*/
final GridBagConstraints gridBagConstraints = new GridBagConstraints();//定义gridBagConstraints
//gridx==>x轴索引值,代表水平,gridy==>y轴索引值,代表垂直
gridBagConstraints.gridy = 0;//起始点为第一行
gridBagConstraints.gridx = 0;//起始点为第一列
/*
weightx属性,是用来设置其所在列对额外空间的分布方式,
如果该列中含多个weightx属性,则取它们的最大值为该列的分布方式;
weighty属性,是用来设置其所在行对额外空间的分布方式,
如果该列中含多个weightx属性,则取它们的最大值为该列的分布方式。
*/
gridBagConstraints.weightx = 10;//第1列的分布方式为10%
/*
fill属性,设置组件的填充方式,
设置静态常量为NONE,为不调整组件大小至填满显示区域
设置静态常量为HORIZONTAL==》表示只调整组件水平方向的大小(即组件宽度)填满显示区域
设置静态常量为VERTICAL==》表示只调整组件垂直方向的大小(即组件高度)填满显示区域
设置静态常量为BOTH,则表示同时调整组件的宽度和高度至填满显示区域
*/
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
//注意在此处设置网格布局管理器,否则会发生报错!!!
setLayout(new GridBagLayout());
setTitle("网格组布局管理器");
//先获取容器,然后在容器里面添加按钮,采用网格组布局管理器
getContentPane().add(button, gridBagConstraints);
final JButton button_1 = new JButton("B");
final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
/*
设置组件最左侧的最小距离,insets为设置组件四周与单元格边缘之间的距离
Insets类仅有一个构造方法Insets(int top,int left,int bottom,int right)这四个入口参数
依次为组件上方、左侧、下方和右侧的最小距离,单位为像素
*/
gridBagConstraints_1.insets = new Insets(0, 5, 0, 0);
gridBagConstraints_1.weightx = 20;//第一列的分布方式为20%
gridBagConstraints_1.fill=GridBagConstraints.HORIZONTAL;
getContentPane().add(button_1,gridBagConstraints_1);
final GridBagConstraints gridBagConstraints_2=new GridBagConstraints();
final JButton button_2=new JButton("C");
gridBagConstraints_2.gridy=0;//起始点为第一行
gridBagConstraints_2.gridx=2;//起始点为第三列
//gridheight==》组件占据行数,gridwidth==》组件占据列数
gridBagConstraints_2.gridheight=2;//组件占两行
gridBagConstraints_2.insets=new Insets(0,5,0,0);
gridBagConstraints_2.weightx=30;//第一列的分布方式为30%
//同时调整组件的宽度与高度
gridBagConstraints_2.fill=GridBagConstraints.BOTH;
getContentPane().add(button_2,gridBagConstraints_2);
final GridBagConstraints gridBagConstraints_3=new GridBagConstraints();
final JButton button_3=new JButton("D");
gridBagConstraints_3.gridy=0;//起始点为第一行
gridBagConstraints_3.gridx=3;//起始点为第四列
gridBagConstraints_3.gridheight=4;//组件占据四行
//设置组件左侧和右侧的最小距离
gridBagConstraints_3.insets=new Insets(0,5,0,5);
gridBagConstraints_3.weightx=40;//第一列的分布方式为40%
gridBagConstraints_3.fill=GridBagConstraints.BOTH;
getContentPane().add(button_3,gridBagConstraints_3);
final GridBagConstraints gridBagConstraints_4=new GridBagConstraints();
final JButton button_4=new JButton("E");
gridBagConstraints_4.gridy=1;
gridBagConstraints_4.gridx=0;
gridBagConstraints_4.gridwidth=2;//所在列占两行
//设置组件上方的最小距离
gridBagConstraints_4.insets=new Insets(5,0,0,0);
gridBagConstraints_4.fill=GridBagConstraints.HORIZONTAL;
getContentPane().add(button_4,gridBagConstraints_4);
final GridBagConstraints gridBagConstraints_5=new GridBagConstraints();
final JButton button_5=new JButton("F");
gridBagConstraints_5.gridy=2;
gridBagConstraints_5.gridx=0;
gridBagConstraints_5.insets=new Insets(5,0,0,0);
gridBagConstraints_5.fill=GridBagConstraints.HORIZONTAL;
getContentPane().add(button_5,gridBagConstraints_5);
final GridBagConstraints gridBagConstraints_6=new GridBagConstraints();
final JButton button_6=new JButton("G");
gridBagConstraints_6.gridy=2;
gridBagConstraints_6.gridx=1;
gridBagConstraints_6.gridwidth=2;
gridBagConstraints_6.gridheight=2;
gridBagConstraints_6.insets=new Insets(5,5,0,0);
// gridBagConstraints_6.fill=GridBagConstraints.BOTH;
//修改组件G的代码,填充方式垂直填充,水平方向上将组件的首选宽度增加35像素,显示位置设置在东方
gridBagConstraints_6.fill=GridBagConstraints.VERTICAL;//垂直,只调整组件高度
/*
ipadx用来修改组件的宽度,ipady用来修改组件的高度
*/
gridBagConstraints_6.ipadx=30;//水平方向增加组件首选宽度为30
/*
anchor属性用来设置组件在其所显示区域的显示位置
通常将显示区域从方向上划分为9个方位,北方(NORTH)、东北(NORTHEAST)、南方(SOUTH)、
西南(SOUTHWEST)、西方(WEST)、西北(NORTHWEST)、东方(EAST)、东南(EASTSOUTH)和中心(CENTER)
可以利用这9个静态常量设置anchor属性,其中常量CENTER为默认位置
*/
gridBagConstraints_6.anchor=GridBagConstraints.EAST;//显示组件在东方
getContentPane().add(button_6,gridBagConstraints_6);
final GridBagConstraints gridBagConstraints_7=new GridBagConstraints();
final JButton button_7=new JButton("H");
gridBagConstraints_7.gridy=3;
gridBagConstraints_7.gridx=0;
gridBagConstraints_7.insets=new Insets(5,0,0,0);
gridBagConstraints_7.fill=GridBagConstraints.BOTH;
getContentPane().add(button_7,gridBagConstraints_7);
setSize(300,300);
setVisible(true);
}
public static void main(String[] args){
new GridBagExamplee();
}
}