8.2.6 GridBagLayout布局管理器

8.2.6 GridBagLayout布局管理器

1.GridbagLayout概述

GridbagLayout管理器是AWT提供的最灵活、最复杂的布局管理器。它能按行、列放置组件,并允许特定的组件跨多行或多列。可以通过在GridbagLayout中指定个别组件的尺寸来重新定义组件的大小。

当你指定组件的尺寸和位置时,还需指定对每个组件的约束。要指定约束,需要为GridBagConstraints对象设置变量,并用setConstraints()方法指定GridBagLayout 管理器对象,还需将约束同组件关联起来。

GridBagLayout类有一个不接收任何参数的单独的构造函数。因为布局中每个组件的位置由GridBagLayout对象控制,并由当前设置的GridBagConstraints对象决定,需要先创建GridBagConstraints对象,然后才能构建布局。通过下列代码调用类的构造函数来构建对象:

img355

和GridBagLayout类一样,GridBagConstraints的构造函数也不需要参数。但是,因为类的属性被初始化成缺省值,在向布局添加组件之前,你通常需要改变其中的某些值。

2.GridbagLayout管理器常用的方法

public GridBagLoyout()

构造器。建立一个新的GridBagLayout类对象。

public GridBagConstraints lookupConstraints(Component comp)

返回comp元件的GridBagLoyout方式布局管理的限制条件。

public void setConstraints(Component comp,GridBagLoyout constraints)

设置comp元件的GridBagLoyout方式布局管理的限制条件为constraints。

3.指定约束

在多个组件的情况下,可以重用GridBagConstraints对象,即使这些组件有不同的约束。可以将以下值分配给GridBagConstraints 的属性:anchor、fill、gridx、gridy、weightx和weighty。

(1)anchor

该属性在组件比其显示区域小的时候使用。它决定了将组件放在显示区域的什么地方。合法值有:

img356

(2)fill

该属性适用于组件的显示区域大于所需尺寸的情况。它决定了是否要(如何)重新设定组件的尺寸。合法值有:

img357

这些属性在组件的显示区域指定了列数(对 gridwidth而言)和行数(对gridheight而言)。缺省值为1。合法值有:

img358

注意:用GridBagConstraints.REMAINDER 来指定:组件应该为一行(对gridwidth而言)或一列(对gridheight而言)中的最后一个。用GridBagConstraints.RELATIVE to来指定:组件应该为一行(对gridwidth而言)或一列(对gridheight而言)中的下一个。

(3)Gridx,gridy

该属性指明了相对于组件的显示区域左上角的行地址和列地址。最左边的列的地址gridx = 0,最上边的单元格的地址gridy = 0。用GridBagConstraints.RELATIVE(缺省值)来指定组件应该刚好被放置在放入该容器的前一个组件的右(对gridx而言)下(对gridy而言)方。

(4)Weightx,weighty

该属性确定了是否要将组件水平拉伸(weightx)或垂直拉伸(weighty)、填充applet的显示区域。缺省值为0,表示两者都拉伸。

【例8-8】带约束的GridbagLayout布局管理示例。

要求:请设计一程序使用GridBagLayout布局管理完成有六个按钮元件分别标明“Button1”、“Button2”、“Button3”、“Button4”、“Button5”、“Button6”,并按图8-9所示进行放置。

img359

图8-9 例8-8程序中按钮布局

源程序如下:

img360

img361

注意:GridBagLayout类以类似格子的风格放置容器对象的元素,其中某些组件跨多行或多列。GridBagConstraints类用于识别对象中组件包含的位置参数。