JavaTM 2 Platform
Standard Ed. 5.0

java.awt
类 GridBagLayout

java.lang.Object
  继承者 java.awt.GridBagLayout
所有已实现的接口:
LayoutManager, LayoutManager2, Serializable

public class GridBagLayout
extends Object
implements LayoutManager2, Serializable

GridBagLayout 类是一个灵活的布局管理器,它不要求组件的大小相同即可将组件垂直和水平对齐。每个 GridBagLayout 对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,称为显示区域

每个由 GridBagLayout 管理的组件都与 GridBagConstraints 的实例相关联。Constraints 对象指定组件在网格中的显示区域以及组件在其显示区域中的放置方式。除了 Constraints 对象之外,GridBagLayout 还考虑每个组件的最小和首选大小,以确定组件的大小。

网格的总体方向取决于容器的 ComponentOrientation 属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。对于水平的从右到左的方向,网格坐标 (0,0) 位于容器的右上角,其中 X 向左递增,Y 向下递增。

为了有效使用网格包布局,必须自定义与组件相关联的一个或多个 GridBagConstraints 对象。可以通过设置一个或多个实例变量来自定义 GridBagConstraints 对象:

GridBagConstraints.gridxGridBagConstraints.gridy
指定包含组件显示区域的前导角的单元,在此显示区域中,位于网格原点的单元地址是 gridx = 0gridy = 0。对于水平的从左到右的布局,组件的前导角是其左上角。对于水平的从右到左的布局,组件的前导角是其右上角。使用 GridBagConstraints.RELATIVE(默认值)指定将组件置于添加此组件前刚刚添加到容器组件的后面(沿 gridx 的 X 轴或 gridy 的 Y 轴)。
GridBagConstraints.gridwidthGridBagConstraints.gridheight
指定组件的显示区域中行(针对 gridwidth)或列(针对 gridheight)中的单元数。默认值为 1。使用 GridBagConstraints.REMAINDER 指定组件的显示区域为从 gridx 到该行(针对 gridwidth)中的最后一个单元,或者从 gridy 到该列(针对 gridheight)中的最后一个单元。 使用 GridBagConstraints.RELATIVE 指定组件的显示区域为从 gridx 到其所在行(针对 gridwidth)的倒数第二个单元,或者从 gridy 到其所在列(针对 gridheight)的倒数第二个单元。
GridBagConstraints.fill
当组件的显示区域大于组件的所需大小时,用于确定是否(以及如何)调整组件。可能的值为 GridBagConstraints.NONE(默认值)、GridBagConstraints.HORIZONTAL(加宽组件直到它足以在水平方向上填满其显示区域,但不更改其高度)、GridBagConstraints.VERTICAL(加高组件直到它足以在垂直方向上填满其显示区域,但不更改其宽度)和 GridBagConstraints.BOTH(使组件完全填满其显示区域)。
GridBagConstraints.ipadxGridBagConstraints.ipady
指定布局中组件的内部填充,对组件最小大小的添加量。组件的宽度至少为其最小宽度加上 ipadx 像素。类似地,组件的高度至少为其最小高度加上 ipady 像素。
GridBagConstraints.insets
指定组件的外部填充,组件与其显示区域边缘之间间距的最小量。
GridBagConstraints.anchor
当组件小于其显示区域时,用于确定将组件置于何处(在显示区域中)。可能的值有两种:相对和绝对。相对值的解释是相对于容器的 ComponentOrientation 属性,而绝对值则不然。有效值有:

绝对值

相对值

  • GridBagConstraints.NORTH
  • GridBagConstraints.SOUTH
  • GridBagConstraints.WEST
  • GridBagConstraints.EAST
  • GridBagConstraints.NORTHWEST
  • GridBagConstraints.NORTHEAST
  • GridBagConstraints.SOUTHWEST
  • GridBagConstraints.SOUTHEAST
  • GridBagConstraints.CENTER (the default)
  • GridBagConstraints.PAGE_START
  • GridBagConstraints.PAGE_END
  • GridBagConstraints.LINE_START
  • GridBagConstraints.LINE_END
  • GridBagConstraints.FIRST_LINE_START
  • GridBagConstraints.FIRST_LINE_END
  • GridBagConstraints.LAST_LINE_START
  • GridBagConstraints.LAST_LINE_END
  • GridBagConstraints.weightxGridBagConstraints.weighty
    用于确定分布空间的方式,这对于指定调整行为至关重要。除非在行 (weightx) 和列 (weighty) 中至少指定一个组件的权重,否则所有组件都会聚集在其容器的中央。这是因为,当权重为零(默认值)时,GridBagLayout 对象会将所有额外空间置于其单元网格和容器边缘之间。

    下图显示了由网格包布局管理的十个组件(均为按钮)。图 1 显示水平方向从左到右容器的布局,图 2 显示水平方向从右到左容器的布局。

    对此图形的描述见前文(图 1)。 对此图形的描述见前文(图 2)。
    图 1:水平方向,从左到右 图 2:水平方向,从右到左

    这十个组件的每一个都将与其相关的 GridBagConstraints 对象的 fill 字段设置为 GridBagConstraints.BOTH。此外,这些组件还有以下非默认值约束 (Constraints):

    下面是实现上述示例的代码:


     import java.awt.*;
     import java.util.*;
     import java.applet.Applet;
    
     public class GridBagEx1 extends Applet {
    
         protected void makebutton(String name,
                                   GridBagLayout gridbag,
                                   GridBagConstraints c) {
             Button button = new Button(name);
             gridbag.setConstraints(button, c);
             add(button);
         }
    
         public void init() {
             GridBagLayout gridbag = new GridBagLayout();
             GridBagConstraints c = new GridBagConstraints();
    
             setFont(new Font("SansSerif", Font.PLAIN, 14));
             setLayout(gridbag);
    
             c.fill = GridBagConstraints.BOTH;
             c.weightx = 1.0;
             makebutton("Button1", gridbag, c);
             makebutton("Button2", gridbag, c);
             makebutton("Button3", gridbag, c);
    
               c.gridwidth = GridBagConstraints.REMAINDER; //end row
             makebutton("Button4", gridbag, c);
    
             c.weightx = 0.0;                  //reset to the default
             makebutton("Button5", gridbag, c); //another row
    
               c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
             makebutton("Button6", gridbag, c);
    
               c.gridwidth = GridBagConstraints.REMAINDER; //end row
             makebutton("Button7", gridbag, c);
    
               c.gridwidth = 1;                //reset to the default
               c.gridheight = 2;
             c.weighty = 1.0;
             makebutton("Button8", gridbag, c);
    
             c.weighty = 0.0;                  //reset to the default
               c.gridwidth = GridBagConstraints.REMAINDER; //end row
               c.gridheight = 1;               //reset to the default
             makebutton("Button9", gridbag, c);
             makebutton("Button10", gridbag, c);
    
             setSize(300, 100);
         }
    
         public static void main(String args[]) {
               Frame f = new Frame("GridBag Layout Example");
               GridBagEx1 ex1 = new GridBagEx1();
    
               ex1.init();
    
               f.add("Center", ex1);
               f.pack();
               f.setSize(f.getPreferredSize());
               f.show();
         }
     }
     

    从以下版本开始:
    JDK1.0
    另请参见:
    GridBagConstraints, ComponentOrientation, 序列化表格

    字段摘要
     double[] columnWeights
              此字段保持对列权重的重写。
     int[] columnWidths
              此字段保持对列最小宽度的重写。
    protected  Hashtable<Component,GridBagConstraints> comptable
              此哈希表维持组件与其网格包约束之间的关联。
    protected  GridBagConstraints defaultConstraints
              此字段保持包含默认值的网格包约束实例,因此如果某个组件没有与其相关联的网格包约束,则会分配给该组件一个 defaultConstraints 的副本。
    protected  java.awt.GridBagLayoutInfo layoutInfo
              此字段保持网格包的布局信息。
    protected static int MAXGRIDSIZE
               
    protected static int MINSIZE
              网格包布局可以布置的最小网格。
    protected static int PREFERREDSIZE
              网格包布局可以布置的首选网格大小。
     int[] rowHeights
              此字段保持对行最小高度的重写。
     double[] rowWeights
              此字段保持对行权重的重写。
     
    构造方法摘要
    GridBagLayout()
              创建网格包布局管理器。
     
    方法摘要
     void addLayoutComponent(Component comp, Object constraints)
              使用指定 constraints 对象将指定组件添加到布局中。
     void addLayoutComponent(String name, Component comp)
              无效,因为此布局管理器不使用每组件字符串。
    protected  void adjustForGravity(GridBagConstraints constraints, Rectangle r)
              根据约束几何结构和填充将 x、y、宽度和高度四个字段调整为正确值。
    protected  void AdjustForGravity(GridBagConstraints constraints, Rectangle r)
              此方法已过时,仅提供向后兼容性;新代码应该调用 adjustForGravity 来代替。
    protected  void arrangeGrid(Container parent)
              布置网格。
    protected  void ArrangeGrid(Container parent)
              此方法已过时,仅提供向后兼容性;新代码应该调用 arrangeGrid 来代替。
     GridBagConstraints getConstraints(Component comp)
              获得指定组件的约束。
     float getLayoutAlignmentX(Container parent)
              返回沿 X 轴的对齐方式。
     float getLayoutAlignmentY(Container parent)
              返回沿 y 轴的对齐方式。
     int[][] getLayoutDimensions()
              确定布局网格的列宽度和行高度。
    protected  java.awt.GridBagLayoutInfo getLayoutInfo(Container parent, int sizeflag)
              为当前托管子级的集合填充 GridBagLayoutInfo 的实例。
    protected  java.awt.GridBagLayoutInfo GetLayoutInfo(Container parent, int sizeflag)
              此方法已过时,仅提供向后兼容性;新代码应该调用 getLayoutInfo 来代替。
     Point getLayoutOrigin()
              在目标容器的图形坐标空间确定布局区域的原点。
     double[][] getLayoutWeights()
              确定布局网格的行与列的权重。
    protected  Dimension getMinSize(Container parent, java.awt.GridBagLayoutInfo info)
              基于 getLayoutInfo 中的信息计算其所有者的最小大小。
    protected  Dimension GetMinSize(Container parent, java.awt.GridBagLayoutInfo info)
              此方法已过时,仅提供向后兼容性;新代码应该调用 getMinSize 来代替。
     void invalidateLayout(Container target)
              使布局失效,指示如果布局管理器缓存了信息,则应该将其丢弃。
     void layoutContainer(Container parent)
              使用此网格包布局布置指定容器。
     Point location(int x, int y)
              确定在布局网格中哪个单元包含由 (x, y) 指定的点。
    protected  GridBagConstraints lookupConstraints(Component comp)
              检索指定组件的约束。
     Dimension maximumLayoutSize(Container target)
              在给出指定目标容器中的组件的前提下,返回此布局的最大维数
     Dimension minimumLayoutSize(Container parent)
              使用此网格包布局确定 parent 容器的最小大小。
     Dimension preferredLayoutSize(Container parent)
              使用此网络包布局确定 parent 容器的首选大小。
     void removeLayoutComponent(Component comp)
              从此布局移除指定组件。
     void setConstraints(Component comp, GridBagConstraints constraints)
              设置此布局中指定组件的约束条件。
     String toString()
              返回此网格包布局的值的字符串表示形式。
     
    从类 java.lang.Object 继承的方法
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    字段详细信息

    MAXGRIDSIZE

    protected static final int MAXGRIDSIZE
    另请参见:
    常量字段值

    MINSIZE

    protected static final int MINSIZE
    网格包布局可以布置的最小网格。

    另请参见:
    常量字段值

    PREFERREDSIZE

    protected static final int PREFERREDSIZE
    网格包布局可以布置的首选网格大小。

    另请参见:
    常量字段值

    comptable

    protected Hashtable<Component,GridBagConstraints> comptable
    此哈希表维持组件与其网格包约束之间的关联。comptable 中的键是组件,值是 GridBagConstraints 的实例。

    另请参见:
    GridBagConstraints

    defaultConstraints

    protected GridBagConstraints defaultConstraints
    此字段保持包含默认值的网格包约束实例,因此如果某个组件没有与其相关联的网格包约束,则会分配给该组件一个 defaultConstraints 的副本。

    另请参见:
    getConstraints(Component), setConstraints(Component, GridBagConstraints), lookupConstraints(Component)

    layoutInfo

    protected java.awt.GridBagLayoutInfo layoutInfo
    此字段保持网格包的布局信息。此字段中的信息以最近验证的网格包为基础。如果 layoutInfonull,这指示网格包中不存在组件,或者即使存在,也是尚未经过验证的组件。

    另请参见:
    getLayoutInfo(Container, int)

    columnWidths

    public int[] columnWidths
    此字段保持对列最小宽度的重写。如果此字段为非 null,则在计算全部最小列宽度之后将该值应用到网格包。如果 columnWidths 的元素多于列数,则在网格包中添加列以匹配 columnWidth 中的元素数。

    另请参见:
    getLayoutDimensions()

    rowHeights

    public int[] rowHeights
    此字段保持对行最小高度的重写。如果此字段为非 null,则在计算全部最小行高度之后将值应用到网格包。如果 rowHeights 的元素多于行数,则在网格包中添加行以匹配 rowHeights 中的元素数。

    另请参见:
    getLayoutDimensions()

    columnWeights

    public double[] columnWeights
    此字段保持对列权重的重写。如果此字段为非 null,则在计算全部列权重之后将值应用到网格包。如果 columnWeights[i] 大于列 i 的权重,则将 columnWeights[i] 中的权重分配给列 i。如果 columnWeights 的元素多于列数,则多余的元素将被忽略——它们不会导致更多列的创建。


    rowWeights

    public double[] rowWeights
    此字段保持对行权重的重写。如果此字段为非 null,则在计算全部行权重之后将值应用到网格包。如果 rowWeights[i] 大于行 i 的权重,则将 rowWeights[i] 中的权重分配给行 i。如果 rowWeights 的元素多于行数,则多余的元素将被忽略——它们不会导致更多行的创建。

    构造方法详细信息

    GridBagLayout

    public GridBagLayout()
    创建网格包布局管理器。

    方法详细信息

    setConstraints

    public void setConstraints(Component comp,
                               GridBagConstraints constraints)
    设置此布局中指定组件的约束条件。

    参数:
    comp - 要修改的组件
    constraints - 要应用的约束条件

    getConstraints

    public GridBagConstraints getConstraints(Component comp)
    获得指定组件的约束。返回实际 GridBagConstraints 对象的副本。

    参数:
    comp - 要查询的组件
    返回:
    此网格包布局中指定组件的约束;返回实际约束对象的副本

    lookupConstraints

    protected GridBagConstraints lookupConstraints(Component comp)
    检索指定组件的约束。返回值不是副本,而是布局机制使用的实际 GridBagConstraints 对象。

    如果 comp 不在 GridBagLayout 中,则返回一组默认的 GridBagConstraintsnullcomp 值是无效的,返回 null

    参数:
    comp - 要查询的组件
    返回:
    指定组件的约束

    getLayoutOrigin

    public Point getLayoutOrigin()
    在目标容器的图形坐标空间确定布局区域的原点。此值表示布局区域的左上角的像素坐标,不管容器的 ComponentOrientation 值如何。这与单元坐标给定的网格原点 (0,0) 不同。大多数应用程序并不直接调用此方法。

    返回:
    布局网格左上角的单元的图形原点
    从以下版本开始:
    JDK1.1
    另请参见:
    ComponentOrientation

    getLayoutDimensions

    public int[][] getLayoutDimensions()
    确定布局网格的列宽度和行高度。

    大多数应用程序并不直接调用此方法。

    返回:
    一个二维数组,包含布局列的宽度和布局行的高度
    从以下版本开始:
    JDK1.1

    getLayoutWeights

    public double[][] getLayoutWeights()
    确定布局网格的行与列的权重。如果布局具有额外空间来填充,则权重用于计算给定的行或列可以伸展得超过首选大小多少。

    大多数应用程序不直接调用此方法。

    返回:
    一个二维数组,表示布局列的水平权重和布局行的垂直权重。
    从以下版本开始:
    JDK1.1

    location

    public Point location(int x,
                          int y)
    确定在布局网格中哪个单元包含由 (x, y) 指定的点。每个单元由其列索引(范围从 0 到列数减 1)和其行索引(范围从 0 到行数减 1)来标识。

    如果 (x, y) 点位于网格的外部,则使用以下规则。如果 x 位于从左到右容器布局的左边或位于从右到左容器布局的右边,则列索引的返回值为 0。如果 x 位于从左到右容器布局的右边或位于从右到左容器布局的左边,则列索引的返回值是列数。如果 y 位于布局的上边,则行索引的返回值为零;如果 y 位于布局的下边,则行索引的返回值为行数。容器的方向由其 ComponentOrientation 属性确定。

    参数:
    x - 点的 x 坐标
    y - 点的 y 坐标
    返回:
    索引的有序对,指示布局网格中的哪个单元包含点 (x,y)。
    从以下版本开始:
    JDK1.1
    另请参见:
    ComponentOrientation

    addLayoutComponent

    public void addLayoutComponent(String name,
                                   Component comp)
    无效,因为此布局管理器不使用每组件字符串。

    指定者:
    接口 LayoutManager 中的 addLayoutComponent
    参数:
    name - 要与组件关联的字符串
    comp - 要添加的组件

    addLayoutComponent

    public void addLayoutComponent(Component comp,
                                   Object constraints)
    使用指定 constraints 对象将指定组件添加到布局中。注意,约束条件是可变的,因此缓存时应该克隆。

    指定者:
    接口 LayoutManager2 中的 addLayoutComponent
    参数:
    comp - 要添加的组件
    constraints - 确定如何将组件添加到布局的对象
    抛出:
    IllegalArgumentException - 如果 constraints 不是 GridBagConstraint

    removeLayoutComponent

    public void removeLayoutComponent(Component comp)
    从此布局移除指定组件。

    大多数应用程序不直接调用此方法。

    指定者:
    接口 LayoutManager 中的 removeLayoutComponent
    参数:
    comp - 要移除的组件。
    另请参见:
    Container.remove(java.awt.Component), Container.removeAll()

    preferredLayoutSize

    public Dimension preferredLayoutSize(Container parent)
    使用此网络包布局确定 parent 容器的首选大小。

    大多数应用程序不直接调用此方法。

    指定者:
    接口 LayoutManager 中的 preferredLayoutSize
    参数:
    parent - 在其中进行布局的容器
    返回:
    parent 容器的首选大小
    另请参见:
    Container.getPreferredSize()

    minimumLayoutSize

    public Dimension minimumLayoutSize(Container parent)
    使用此网格包布局确定 parent 容器的最小大小。

    大多数应用程序不直接调用此方法。

    指定者:
    接口 LayoutManager 中的 minimumLayoutSize
    参数:
    parent - 在其中进行布局的容器
    返回:
    parent 容器的最小大小
    另请参见:
    Container.doLayout()

    maximumLayoutSize

    public Dimension maximumLayoutSize(Container target)
    在给出指定目标容器中的组件的前提下,返回此布局的最大维数

    指定者:
    接口 LayoutManager2 中的 maximumLayoutSize
    参数:
    target - 需要布置的容器
    返回:
    此布局的最大维数
    另请参见:
    Container, minimumLayoutSize(Container), preferredLayoutSize(Container)

    getLayoutAlignmentX

    public float getLayoutAlignmentX(Container parent)
    返回沿 X 轴的对齐方式。它指定该组件相对于其他组件如何对齐。该值应该是一个介于 0 和 1 之间的数,其中 0 表示沿原点对齐,1 表示按距原点最远的点对齐,0.5 表示居中对齐等。

    指定者:
    接口 LayoutManager2 中的 getLayoutAlignmentX
    返回:
    指示居中对齐的值 0.5f

    getLayoutAlignmentY

    public float getLayoutAlignmentY(Container parent)
    返回沿 y 轴的对齐方式。它指定该组件相对于其他组件如何对齐。该值应该是一个介于 0 和 1 之间的数,其中 0 表示沿原点对齐,1 表示按距原点最远的点对齐,0.5 表示居中对齐等。

    指定者:
    接口 LayoutManager2 中的 getLayoutAlignmentY
    返回:
    指示居中对齐的值 0.5f

    invalidateLayout

    public void invalidateLayout(Container target)
    使布局失效,指示如果布局管理器缓存了信息,则应该将其丢弃。

    指定者:
    接口 LayoutManager2 中的 invalidateLayout

    layoutContainer

    public void layoutContainer(Container parent)
    使用此网格包布局布置指定容器。为了满足此 GridBagLayout 对象的约束条件,此方法会重塑指定容器中的组件。

    大多数应用程序不直接调用此方法。

    指定者:
    接口 LayoutManager 中的 layoutContainer
    参数:
    parent - 要在其中进行布局的容器
    另请参见:
    Container, Container.doLayout()

    toString

    public String toString()
    返回此网格包布局的值的字符串表示形式。

    覆盖:
    Object 中的 toString
    返回:
    此网格包布局的字符串表示形式。

    getLayoutInfo

    protected java.awt.GridBagLayoutInfo getLayoutInfo(Container parent,
                                                       int sizeflag)
    为当前托管子级的集合填充 GridBagLayoutInfo 的实例。这需要通过子级集合传递三次:
    1. 计算布局网格的维数。
    2. 确定组件占用的单元。
    3. 在行/列中分布权重和最小大小。
    第一次遇到子级时,此操作还会将所有子级的最小大小缓存起来(因此后续循环不必再次请求)。

    此方法仅供 GridBagLayout 内部使用。

    参数:
    parent - 布局容器
    sizeflag - PREFERREDSIZEMINSIZE
    返回:
    子级集合的 GridBagLayoutInfo
    从以下版本开始:
    1.4

    GetLayoutInfo

    protected java.awt.GridBagLayoutInfo GetLayoutInfo(Container parent,
                                                       int sizeflag)
    此方法已过时,仅提供向后兼容性;新代码应该调用 getLayoutInfo 来代替。此方法与 getLayoutInfo 相同;请参阅 getLayoutInfo 以获取参数及返回值的详细信息。


    adjustForGravity

    protected void adjustForGravity(GridBagConstraints constraints,
                                    Rectangle r)
    根据约束几何结构和填充将 x、y、宽度和高度四个字段调整为正确值。此方法仅供 GridBagLayout 内部使用。

    参数:
    constraints - 要应用的约束
    r - 要调整的 Rectangle
    从以下版本开始:
    1.4

    AdjustForGravity

    protected void AdjustForGravity(GridBagConstraints constraints,
                                    Rectangle r)
    此方法已过时,仅提供向后兼容性;新代码应该调用 adjustForGravity 来代替。此方法与 adjustForGravity 相同;请参阅 adjustForGravity 以获取参数及返回值的详细信息。


    getMinSize

    protected Dimension getMinSize(Container parent,
                                   java.awt.GridBagLayoutInfo info)
    基于 getLayoutInfo 中的信息计算其所有者的最小大小。此方法仅供 GridBagLayout 内部使用。

    参数:
    parent - 布局容器
    info - 此父级的布局信息
    返回:
    包含最小大小的 Dimension 对象
    从以下版本开始:
    1.4

    GetMinSize

    protected Dimension GetMinSize(Container parent,
                                   java.awt.GridBagLayoutInfo info)
    此方法已过时,仅提供向后兼容性;新代码应该调用 getMinSize 来代替。此方法与 getMinSize 相同;请参阅 getMinSize 以获取参数及返回值的详细信息。


    arrangeGrid

    protected void arrangeGrid(Container parent)
    布置网格。此方法仅供 GridBagLayout 内部使用。

    参数:
    parent - 布局容器
    从以下版本开始:
    1.4

    ArrangeGrid

    protected void ArrangeGrid(Container parent)
    此方法已过时,仅提供向后兼容性;新代码应该调用 arrangeGrid 来代替。此方法与 arrangeGrid 相同;请参阅 arrangeGrid 以获取参数及返回值的详细信息。


    JavaTM 2 Platform
    Standard Ed. 5.0

    提交错误或意见
    有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

    版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策