GridBagLayout是最灵活最复杂的布局管理器。 与GridLayout类似,但网格中的组件可以具有不同的大小,并且可以在网格之间交叉组件。
要使用GridBagLayout布局管理器,请执行以下步骤:
1、创建并使用网格布局管理器
gridbaglayoutlayout=newgridbaglayout (; container.setlayout(layout; 2、创建GridBagConstraints对象(约束条件),设置该对象的关联属性
gridbagconstraintsconstraints=newgridbagconstraints (; constraints.gridx=1; constraints.gridy=1; constraints.gridwidth=1; constraints.gridheight=1; 3、调用GridBagLayout对象的setCondtraints )方法,建立GridBagConstraints对象与托管组件的关联
layout.set constraints (component,condtraints ); 4、向容器中添加组件
container.add(component; 您只需更改属性即可重用GridBagConstraints对象。 在容器中添加多个组件时,可以重复2、3、4。
从上述步骤中可以看到,使用GridBagLayout布局管理器的密钥是GridBagConstraints对象。 这就是控制容器中每个组件布局的核心类,而GridBagConstraints具有许多表示约束的属性。 以下进行说明。
GridBagConstraints通用属性用于将gridx和gridy设置为组件左上角网格的横向和纵向引线。 如果gridx和gridy设置为GridBagConstraints.RELATIVE (默认值),则前一组件之后的gridwidth和gridheight设置组件必须横向跨越多个网格如果将这两个属性都更改为gridbagconstraints并将这两个属性更改为GridBagConstraints.RELATIVE,则表明该组件是当前列或行中倒数第二个组件。 如果fill组件的显示区域大于组件所需的大小,则在设置组件大小并指定如何更改组件时,属性将接收一些属性值
1.NONE :默认值,不更改组件大小
2.HORIZONTAL (将组件的水平长度设置为足以满足显示区域,但高度不变)
3.VERTICAL :将零部件的垂直高度设置为足够高以填充可见区域,但长度不变
4.BOTH )使其成为足以填充显示区域的组件
weightx和weighty设置组件占容器水平和垂直边距的百分比(还取决于权重)。 在容器的水平方向上放置三个组件时,weightx的顺序为1、2和3。 如果容器增加60px,这三个容器将分别增加10、20和30像素。 请注意,这两个属性的默认值为0,不占用额外的空间。 要在容器变大时增大组件,必须同时设置GridBagConstraints的fill属性以及weightx和weighty属性。
举以下代码为例。
import java.awt.*; classlayoutextendsframe {公共布局(字符串标题) gridbaglayoutlayout=newgridbaglayout ); gridbagconstraintsc=newgridbagconstraints (; //创建约束对象this.setlayout(layout ); c.fill=GridBagConstraints.BOTH; c .微信=1; c .权重=1; this.addcomponent('but1 ',layout,c ); //连续添加三个具有相同约束条件的组件this.addcomponent(but2 )、layout和c; this.addcomponent('but3 ',layout,c ); c.grid width=gridbag constraints.remainder; this.addcomponent('but4 ',layout,c ),指示添加的组件是工作的最后一个组件; c .微信=0; c .权重=0; this.addcomponent('but5',layout,c ); c .网格宽度=1; this.addcomponent('but6',layout,c ); c.grid width=gridbag constraints.remainder; this.addcomponent('but7',layout,c ); c .网格高度=2; c .网格宽度=1; c .微信=2; c .权重=2; this.addcomponent('but8',layout,c ); c .网格高度=1; c.grid width=gridbag constraints.remainder; this.addcomponent('but9',layout,c ); this.addcomponent('but10 ',layout,c ); this.pack (; this.setvisible(true; } publicvoidaddcomponent (字符串名称,GridBagLayout layout,GridBagConstraints c ) buttonbut=newbutton ) name; layout.setconstraints(but,c ); this.add(but; } public class main { publicstaticvoidmain (string [ ] args ) throwsexception ) newlayout('gridbaglayout ' ); }运行程序后,显示窗口。 展开或展开窗口,可以看到约束不同属性的不同作用