|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.GridBagLayout
public class GridBagLayout
GridBagLayout
类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个 GridBagLayout
对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,该单元被称为显示区域。
每个由 GridBagLayout
管理的组件都与 GridBagConstraints
的实例相关联。Constraints 对象指定组件的显示区域在网格中的具体放置位置,以及组件在其显示区域中的放置方式。除了 Constraints 对象之外,GridBagLayout
还考虑每个组件的最小大小和首选大小,以确定组件的大小。
网格的总体方向取决于容器的 ComponentOrientation
属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。对于水平的从右到左的方向,网格坐标 (0,0) 位于容器的右上角,其中 X 向左递增,Y 向下递增。
为了有效使用网格包布局,必须自定义与组件关联的一个或多个 GridBagConstraints
对象。可以通过设置一个或多个实例变量来自定义 GridBagConstraints
对象:
GridBagConstraints.gridx
、GridBagConstraints.gridy
gridx = 0
, gridy = 0
。对于水平的从左到右的布局,组件的前导角是其左上角。对于水平的从右到左的布局,组件的前导角是其右上角。使用 GridBagConstraints.RELATIVE
(默认值),指定会将组件直接放置在之前刚添加到容器中的组件的后面(沿 X 轴向为 gridx
或 Y 轴向为 gridy
)。
GridBagConstraints.gridwidth
、GridBagConstraints.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.ipadx
、GridBagConstraints.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 (默认值) |
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.BASELINE GridBagConstraints.BASELINE_LEADING GridBagConstraints.BASELINE_TRAILING GridBagConstraints.ABOVE_BASELINE GridBagConstraints.ABOVE_BASELINE_LEADING GridBagConstraints.ABOVE_BASELINE_TRAILING GridBagConstraints.BELOW_BASELINE GridBagConstraints.BELOW_BASELINE_LEADING GridBagConstraints.BELOW_BASELINE_TRAILING |
GridBagConstraints.weightx
、GridBagConstraints.weighty
weightx
) 和列 (weighty
) 中至少指定一个组件的权重,否则所有组件都会聚集在其容器的中央。这是因为,当权重为零(默认值)时,GridBagLayout
对象会将所有额外空间置于其单元网格和容器边缘之间。
每行可以有一条基线,具体取决于该行中具有有效基线并沿此基线对齐的组件(组件的锚值是 BASELINE
、BASELINE_LEADING
或 BASELINE_TRAILING
其中之一)。如果行中没有具有有效基线的组件,则该行没有基线。
如果组件跨多行,则它与起始行(如果基线调整行为是 CONSTANT_ASCENT
)或结束行(如果基线调整行为是 CONSTANT_DESCENT
)的基线对齐。用来对齐组件的行称为主导行。
下图显示了基线布局并包括横跨行的组件:
CONSTANT_DESCENT
基线调整行为以及 BASELINE
的锚。因为基线调整行为是 CONSTANT_DESCENT
,所以该面板的主要行是第 1 行。
CENTER_OFFSET
基线调整行为和 BASELINE
的锚。
使用一个相对于基线的值定位的组件调整不同于使用绝对值或相对于方向的值。组件更改的方式由主要行的基线更改方式指示。如果基于相同主导行的所有组件具有 CONSTANT_DESCENT
基线调整行为,则基线定位到显示区域底部;否则,基线定位到显示区域顶部。下述规则指示调整大小的行为:
OTHER
基线调整行为的可调整大小组件。如果不能将基线放入显示区域,则该组件不能调整大小。
OTHER
基线调整行为的组件只能增长到和显示高度 - 基线 + 组件基线
一样高。
下图显示了由网格包布局管理的十个组件(均为按钮)。图 2 显示水平方向从左到右的容器的布局,图 3 显示水平方向从右到左的容器的布局。
图 2:水平方向,从左到右 | 图 3:水平方向,从右到左 |
十个组件的每一个组件都会将与之相关的 GridBagConstraints
对象的 fill
字段设置为 GridBagConstraints.BOTH
。此外,这些组件还具有以下非默认值约束 (Constraints):
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("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(); } }
GridBagConstraints
,
GridBagLayoutInfo
,
ComponentOrientation
,
序列化表格字段摘要 | |
---|---|
double[] |
columnWeights
此字段保持对列权重的重写。 |
int[] |
columnWidths
此字段保持对列最小宽度的重写。 |
protected Hashtable<Component,GridBagConstraints> |
comptable
此哈希表维持组件与其网格包约束之间的关联。 |
protected GridBagConstraints |
defaultConstraints
此字段保持包含默认值的网格包约束实例,因此如果某个组件没有与其相关联的网格包约束,则会分配给该组件一个 defaultConstraints 的副本。 |
protected 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 GridBagLayoutInfo |
getLayoutInfo(Container parent,
int sizeflag)
为当前受管子级的集合填充 GridBagLayoutInfo 的实例。 |
protected GridBagLayoutInfo |
GetLayoutInfo(Container parent,
int sizeflag)
此方法已过时,仅为提供向后兼容性;新代码应该调用 getLayoutInfo 来代替。 |
Point |
getLayoutOrigin()
在目标容器的图形坐标空间确定布局区域的原点。 |
double[][] |
getLayoutWeights()
确定布局网格的行与列的权重。 |
protected Dimension |
getMinSize(Container parent,
GridBagLayoutInfo info)
基于 getLayoutInfo 中的信息计算其所有者的最小大小。 |
protected Dimension |
GetMinSize(Container parent,
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 |
字段详细信息 |
---|
protected static final int MAXGRIDSIZE
protected static final int MINSIZE
protected static final int PREFERREDSIZE
protected Hashtable<Component,GridBagConstraints> comptable
comptable
中的键是组件,值是 GridBagConstraints
的实例。
GridBagConstraints
protected GridBagConstraints defaultConstraints
defaultConstraints
的副本。
getConstraints(Component)
,
setConstraints(Component, GridBagConstraints)
,
lookupConstraints(Component)
protected GridBagLayoutInfo layoutInfo
layoutInfo
为 null
,这指示网格包中不存在组件,或者即使存在,也是尚未经过验证的组件。
getLayoutInfo(Container, int)
public int[] columnWidths
null
,则在计算全部最小列宽度之后将这些值应用到网格包。如果 columnWidths 的元素数多于列数,则在网格包中添加列以匹配 columnWidth 中的元素数。
getLayoutDimensions()
public int[] rowHeights
null
,则在计算全部最小行高度之后将这些值应用到网格包。如果 rowHeights
的元素数多于行数,则在网格包中添加行以匹配 rowHeights
中的元素数。
getLayoutDimensions()
public double[] columnWeights
null
,则在计算全部列权重之后将这些值应用到网格包。如果 columnWeights[i]
大于列 i 的权重,则将 columnWeights[i]
中的权重分配给列 i。如果 columnWeights
的元素数多于列数,则多余的元素将被忽略——而不会相应地创建更多列。
public double[] rowWeights
null
,则在计算全部行权重之后将这些值应用到网格包。如果 rowWeights[i]
大于行 i 的权重,则将 rowWeights[i]
中的权重分配给行 i。如果 rowWeights
的元素多于行数,则多余的元素将被忽略——它们不会导致更多行的创建。
构造方法详细信息 |
---|
public GridBagLayout()
方法详细信息 |
---|
public void setConstraints(Component comp, GridBagConstraints constraints)
comp
- 要修改的组件constraints
- 要应用的约束条件public GridBagConstraints getConstraints(Component comp)
GridBagConstraints
对象的副本。
comp
- 要查询的组件
protected GridBagConstraints lookupConstraints(Component comp)
GridBagConstraints
对象。
如果 comp
不在 GridBagLayout
中,则返回一组默认的 GridBagConstraints
。值为 null
的 comp
值是无效的,返回 null
。
comp
- 要查询的组件
public Point getLayoutOrigin()
ComponentOrientation
值如何。这与单元坐标给定的网格原点 (0,0) 不同。大多数应用程序并不直接调用此方法。
ComponentOrientation
public int[][] getLayoutDimensions()
大多数应用程序并不直接调用此方法。
public double[][] getLayoutWeights()
大多数应用程序不直接调用此方法。
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 坐标
ComponentOrientation
public void addLayoutComponent(String name, Component comp)
LayoutManager
中的 addLayoutComponent
name
- 要与组件关联的字符串comp
- 要添加的组件public void addLayoutComponent(Component comp, Object constraints)
constraints
对象将指定组件添加到布局中。注意,约束条件是可变的,因此缓存时应该复制。
LayoutManager2
中的 addLayoutComponent
comp
- 要添加的组件constraints
- 确定如何将组件添加到布局的对象
IllegalArgumentException
- 如果 constraints
不是 GridBagConstraint
public void removeLayoutComponent(Component comp)
大多数应用程序不直接调用此方法。
LayoutManager
中的 removeLayoutComponent
comp
- 要移除的组件。Container.remove(java.awt.Component)
,
Container.removeAll()
public Dimension preferredLayoutSize(Container parent)
parent
容器的首选大小。
大多数应用程序不直接调用此方法。
LayoutManager
中的 preferredLayoutSize
parent
- 在其中进行布局的容器
parent
容器的首选大小Container.getPreferredSize()
public Dimension minimumLayoutSize(Container parent)
parent
容器的最小大小。
大多数应用程序不直接调用此方法。
LayoutManager
中的 minimumLayoutSize
parent
- 在其中进行布局的容器
parent
容器的最小大小Container.doLayout()
public Dimension maximumLayoutSize(Container target)
LayoutManager2
中的 maximumLayoutSize
target
- 需要布置的容器
Container
,
minimumLayoutSize(Container)
,
preferredLayoutSize(Container)
public float getLayoutAlignmentX(Container parent)
LayoutManager2
中的 getLayoutAlignmentX
0.5f
public float getLayoutAlignmentY(Container parent)
LayoutManager2
中的 getLayoutAlignmentY
0.5f
public void invalidateLayout(Container target)
LayoutManager2
中的 invalidateLayout
public void layoutContainer(Container parent)
GridBagLayout
对象的约束条件,此方法会重塑指定容器中的组件。
大多数应用程序不直接调用此方法。
LayoutManager
中的 layoutContainer
parent
- 要在其中进行布局的容器Container
,
Container.doLayout()
public String toString()
Object
中的 toString
protected GridBagLayoutInfo getLayoutInfo(Container parent, int sizeflag)
GridBagLayoutInfo
的实例。这需要通过子级集合传递三次:
此方法仅供 GridBagLayout
内部使用。
parent
- 布局容器sizeflag
- PREFERREDSIZE
或 MINSIZE
GridBagLayoutInfo
protected GridBagLayoutInfo GetLayoutInfo(Container parent, int sizeflag)
getLayoutInfo
来代替。此方法与 getLayoutInfo
相同;请参阅 getLayoutInfo
以获取参数及返回值的详细信息。
protected void adjustForGravity(GridBagConstraints constraints, Rectangle r)
GridBagLayout
内部使用。
constraints
- 要应用的约束r
- 要调整的 Rectangle
protected void AdjustForGravity(GridBagConstraints constraints, Rectangle r)
adjustForGravity
来代替。此方法与 adjustForGravity
相同;请参阅 adjustForGravity
以获取参数及返回值的详细信息。
protected Dimension getMinSize(Container parent, GridBagLayoutInfo info)
getLayoutInfo
中的信息计算其所有者的最小大小。此方法仅供 GridBagLayout
内部使用。
parent
- 布局容器info
- 此父级的布局信息
Dimension
对象protected Dimension GetMinSize(Container parent, GridBagLayoutInfo info)
getMinSize
来代替。此方法与 getMinSize
相同;请参阅 getMinSize
以获取参数及返回值的详细信息。
protected void arrangeGrid(Container parent)
GridBagLayout
内部使用。
parent
- 布局容器protected void ArrangeGrid(Container parent)
arrangeGrid
来代替。此方法与 arrangeGrid
相同;请参阅 arrangeGrid
以获取参数及返回值的详细信息。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。