摘要:java布局管理GridBagLayout,GridBaglayou(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。
2022-07-0720:24网络推荐
GridBaglayou(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管
理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个
网格。
使用GridBaglLayout布局管理器的步骤如下:
(1)创建GridBagLayout布局管理器,,并使容器采用该布局管理器
GridBagLayoutlayout=newGridBagLayout();
container.setLayout(layout);
GridBagConstraintsconstraints=newGridBagConstraints();
constraints.gridx=1;//设置网格左上角横向索引
constraints.gridy=1;//设置网格左上角纵向索引
constraints.gridwidth=1;//设置组件横向跨越网格
constraints.gridheight=1;//设置组件纵向跨越网格
(3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控
组件之间的关联
Layout.setConstraints(component,constraints);
(4)向容器中添加组件
container.add(conponent);
GridBagConstraints对象可以重复使用,只需要改变它的属性即可。如果要向容器
中添加多个组件,则重复(2).(3).(4)步骤。
从上面的步骤可以看出,使用GridBagLayout布局管理器的关键在于
GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在
GridBagConstraints中有很多表示约束的属性,下面对GridBagConstraints类的一些常
用属性进行介绍,如表11-3所示。
表11-3中,列出了GridBagConstraints的常用属性,其中,gridx和gridy用于设置
组件左上角所在网格的横向和纵向索引,gridwidth和gridheight用于设置组件横向、纵
向跨越几个网格,fill用于设置是否及如何改变组件大小,weightx和weighty用于设置
组件在容器中的水平方向和垂直方向的权重。
需要注意的是,如果希望组件的大小随着容器的增大而增大,必须同时设置
GridBagConstraints对象的fill属性和weightx.weighty属性。
接下来通过一个案例来演示GridBagLayout的用法,如例11-11所示。
例11-11Example11.java;’
importjava.awt.*;
classLayoutextendsFrame{
publicLayout(Stringtitle){
GridBagConstraintsc=newGridBagConstraints();
this.setLayout(layout);
c.fill=GridBagConstraints.BOTH;//设置组件横向纵向可以拉伸
c.weightx=1;//设置横向权重为1
c.weighty=1;//设置纵向权重为1
this.addComponent("btn1",layout,c);
this.addComponent("btn2",layout,c);
this.addComponent("btn3",layout,c);
c.gridwidth=GridBagConstraints.REMAINDER;//添加的组件是本行最后一个组件
this.addComponent("btn4",layout,c);
c.weightx=0;//设置横向权重为0
c.weighty=0;//设置纵向权重为0
addComponent("btn5",layout,c);
c.gridwidth=1;//设置组件跨一个网格(默认值)
this.addComponent("btn6",layout,c);
this.addComponent("btn7",layout,c);
c.gridheight=2;//设置组件纵向跨两个网格
c.gridwidth=1;//设置组件横向跨一个网格
c.weightx=2;//设置横向权重为2
c.weighty=2;//设置纵向权重为2
this.addComponent("btn8",layout,c);
c.gridwidth=GridBagConstraints.REMAINDER;
c.gridheight=1;
this.addComponent("btn11",layout,c);
this.addComponent("btn10",layout,c);
this.pack();
this.setVisible(true);
}
//增加组件的方法
privatevoidaddComponent(Stringname,GridBagLayoutlayout,
GridBagConstraintsc){
Buttonbt=newButton(name);//创建一个名为name的按钮
layout.setConstraints(bt,c);//设置GridBagConstraints对象和按钮的关联
this.add(bt);//增加按钮
publicclassExample11{
publicstaticvoidmain(String[]args){
newLayout("GridBagLayout");
编译运行程序,生成的窗口如图11-20所示。
图11-20例11-11运行结果
例11-11中,向GridBagLayout布局管理器中添加10个按钮。由于每次添加组件的时候都
以将这段关联的代码抽取到addComponent()方法当中,简化书写。
在添加button1~button4按钮和button8~button10按钮时,都将权重weightx和weighty
的值设置为大于0,因此在拉伸窗口时,这些按钮都会随着窗口增大,而在添加button5~button7
按钮时,将权重值设置为0,这样它们的高度在拉伸时没有变化,但长度受上下组件的影响,还是