Java基础入门 GridBagLayout

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/82289589

GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout类似,不同的是它允许网格中的组件大小各不相同,而且允许组件跨网格。

使用GridBagLayout布局管理器的步骤如下:

1、创建GridBagLayout布局管理器,并使用该布局管理器

GridBagLayout layout=new GridBagLayout();
container.setLayout(layout);

2、创建GridBagConstraints对象(约束条件),并设置该对象的相关属性

GridBagConstraints constraints=new GridBagConstraints();
constraints.gridx=1;
constraints.gridy=1;
constraints.gridwidth=1;
constraints.gridheight=1;

3、调用GridBagLayout对象的setCondtraints()方法建立GridBagConstraints对象与受控组件之间的关联

layout.setConstraints(component,condtraints);

4、向容器中添加组件

container.add(component);

GridBagConstraints对象可以重复使用,只需改变它的属性即可。如果要向容器中添加多个组件,则重复2,3,4即可。

从上面步骤可以看出使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类在GridBagConstraints中有很多表示约束的属性,下面一一介绍:

GridBagConstraints常用属性
属性 作用
gridx和gridy 设置在组件左上角所在网格的横向和纵向牵引线。如果将gridx和gridy设置成GridBagConstraints.RELATIVE(默认值),表示跟随在上一个组件后面
gridwidth和gridheight 设置组件横向纵向跨越几个网格,两个属性默认值都是1,如果把这两个属性改为GridBagConstraints.REMAINER,表示当前组件为此行或此列最后一个组件;如果将两个属性改为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.*;

class Layout extends Frame{
	public Layout(String title){
		GridBagLayout layout =new GridBagLayout();
		GridBagConstraints c=new GridBagConstraints();  //创建约束条件对象
		this.setLayout(layout);
		c.fill=GridBagConstraints.BOTH;
		c.weightx=1;
		c.weighty=1;
		this.addComponent("but1", layout, c);//连续添加三个约束条件相同的组件
		this.addComponent("but2", layout, c);
		this.addComponent("but3", layout, c);
		c.gridwidth=GridBagConstraints.REMAINDER;//表示添加的组件是本行最后一个组件
		this.addComponent("but4", layout, c);
		c.weightx=0;
		c.weighty=0;
		this.addComponent("but5", layout, c);
		c.gridwidth=1;
		this.addComponent("but6", layout, c);
		c.gridwidth=GridBagConstraints.REMAINDER;
		this.addComponent("but7", layout, c);
		c.gridheight=2;
		c.gridwidth=1;
		c.weightx=2;
		c.weighty=2;
		this.addComponent("but8", layout, c);
		c.gridheight=1;
		c.gridwidth=GridBagConstraints.REMAINDER;
		this.addComponent("but9", layout, c);
		this.addComponent("but10", layout, c);
		this.pack();
		this.setVisible(true);
	}
	public void addComponent(String name,GridBagLayout layout,GridBagConstraints c){
		Button but=new Button(name);
		layout.setConstraints(but, c);
		this.add(but);
	}
}

public class Main{
	public static void main(String[] args)throws Exception{
        new Layout("GridBagLayout");
	}
}

将程序运行后就会出来一个窗口,将其拉宽或拉长就会发现约束条件不同属性的不同作用

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/82289589
今日推荐