java.lang.Object | +----java.awt.GridBagLayout
GridBagLayout 类是一个灵活的布局管理器,不需要组件的尺寸相同它就可以将组件在垂直方向上和水平方向上对齐。每个
GridBagLayout 对象保留一个动态的矩形单元网格,每个组件占用一个或多个单元,称为它的显示区域。
每个由一个网格元包布局管理的组件都与一个
GridBagConstraints
的实例相关,它指定了组件在它的显示区域是如何放置的。
一个 GridBagLayout 对象放置一组组件的方式,取决于与每个组件相关的 GridBagConstraints 对象,并且取决于组件容器的最小尺寸和首选尺寸。
为了有效的使用网格元包布局,必须定制一个或多个与它的组件相关的
GridBagConstraints 对象。通过设置它的实例的一个或多个变量来定制一个 GridBagConstraints 对象:
gridx
,
gridy
gridx = 0 ,gridy = 0
。使用 GridBagConstraints.RELATIVE
(缺省值)来指定,该组件将被放置在,该组件被添加之前添加到容器中的组件的右边(为
gridx )或下边(为 gridy )。
gridwidth
,
gridheight
gridwidth )或在一列中单元的数目(为
gridheight )。缺省值为 1 。使用
GridBagConstraints.REMAINDER 来指定该组件是在, 它所在行(为 gridwidth )或列(为
gridheight )的最后一个。使用
GridBagConstraints.RELATIVE
来指定该组件是在它所在行(为 gridwidth )或列(为
gridheight )的倒数第二个。
fill
GridBagConstraints.NONE (缺省),
GridBagConstraints.HORIZONTAL
(使组件的宽度在水平方向上足够大来填充它的显示区域,但是不改变它的高度),
GridBagConstraints.VERTICAL
(使组件的高度在垂直方向上足够大来填充它的显示区域,但是不改变它的宽度)和
GridBagConstraints.BOTH
(使组件完全填充它的显示区域)。
ipadx
,
ipady
(ipadx * 2) 个像素(因为补空应用在组件的两边)。类似地,组件的高度至少为它的最小高度加上 (ipady * 2) 个像素。
insets
anchor
GridBagConstraints.CENTER (缺省),
GridBagConstraints.NORTH ,
GridBagConstraints.NORTHEAST ,
GridBagConstraints.EAST ,
GridBagConstraints.SOUTHEAST ,
GridBagConstraints.SOUTH ,
GridBagConstraints.SOUTHWEST ,
GridBagConstraints.WEST 和
GridBagConstraints.NORTHWEST 。
weightx
,
weighty
weightx) ,列中的权值为 (weighty) ,那么所有的组件会都堆在它们容器的中间。这是因为当权值为零时(缺省),
GridBagLayout 对象将在它的单元网格和容器边沿之间任意放置额外的空白。
下列图形显示由网格包布局管理的十个组件(所有的按钮):
十个组件中的每一个都有它的与 GridBagConstraints
对象相关的 fill 域,并设置为
GridBagConstraints.BOTH 。另外,组件有下列非缺省约束:
weightx = 1.0
weightx = 1.0 ,
gridwidth = GridBagConstraints.REMAINDER
gridwidth = GridBagConstraints.REMAINDER
gridwidth = GridBagConstraints.RELATIVE
gridwidth = GridBagConstraints.REMAINDER
gridheight = 2 ,
weighty = 1.0
gridwidth = GridBagConstraints.REMAINDER
下面是实现如上所示的示例的代码:
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("Helvetica", 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();
}
}
(x , y)
指定的点。
目标容器的最小尺寸。
目标容器的首选尺寸。
protected static final int MAXGRIDSIZE
protected static final int MINSIZE
protected static final int PREFERREDSIZEcomptable
protected Hashtable comptabledefaultConstraints
protected GridBagConstraints defaultConstraintslayoutInfo
protected GridBagLayoutInfo layoutInfocolumnWidths
public int columnWidths[]rowHeights
public int rowHeights[]columnWeights
public double columnWeights[]rowWeights
public double rowWeights[]
public GridBagLayout()
public void setConstraints(Component comp,
GridBagConstraints constraints)
public GridBagConstraints getConstraints(Component comp)
GridBagConstraints
对象的一个副本被返回。
protected GridBagConstraints lookupConstraints(Component comp)
GridBagConstraints 对象。
public Point getLayoutOrigin()
public int[][] getLayoutDimensions()
大多数应用程序不直接调用该方法。
public double[][] getLayoutWeights()
大多数应用程序不直接调用该方法。
public Point location(int x,
int y)
(x , y)
指定的点。每个单元由它的列索引(范围从 0 到列数减 1
)和它的行索引(范围从 0 到行数减 1 )来标识。
如果 (x, y) 点位于网格的外部,那么下列规则将被使用。如果 x
位于布局的左边列索引返回零,如果 x
位于布局的右边列索引返回列数。如果 y
位于布局的上边列索引返回零,如果 y
位于布局的下边列索引返回行数。
public void addLayoutComponent(String name,
Component comp)
public void addLayoutComponent(Component comp,
Object constraints)
public void removeLayoutComponent(Component comp)
大多数应用程序不直接调用该方法。
public Dimension preferredLayoutSize(Container parent)
目标容器的首选尺寸。
大多数应用程序不直接调用该方法。
public Dimension minimumLayoutSize(Container parent)
目标容器的最小尺寸。
大多数应用程序不直接调用该方法。
public Dimension maximumLayoutSize(Container target)
public float getLayoutAlignmentX(Container parent)
public float getLayoutAlignmentY(Container parent)
public void invalidateLayout(Container target)
public void layoutContainer(Container parent)
GridBagLayout
对象的约束。
大多数应用程序不直接调用该方法。
public String toString()
protected GridBagLayoutInfo GetLayoutInfo(Container parent,
int sizeflag)
protected void AdjustForGravity(GridBagConstraints constraints,
Rectangle r)
GetMinSize
protected Dimension GetMinSize(Container parent,
GridBagLayoutInfo info)
ArrangeGrid
protected void ArrangeGrid(Container parent)