- java.lang.Object
-
- javax.swing.GroupLayout
-
- All Implemented Interfaces:
-
LayoutManager
,LayoutManager2
public class GroupLayout extends Object implements LayoutManager2
GroupLayout
是一个LayoutManager
,用于对组件进行分层分组,以便将它们放置在一个Container
。GroupLayout
旨在供建筑商使用,但也可以手工编码。 分组是由Group
类的实例完成的。GroupLayout
支持两种类型的组。 一个顺序组按顺序依次定位其子元素。 并行组以四种方式之一对齐其子元素。每个组可包含任意数量的元素,其中的元素是
Group
,Component
,或间隙。 间隙可以被认为是具有最小,优选和最大尺寸的不可见成分。 此外,GroupLayout
支持优先缺口,其值来自LayoutStyle
。元素类似于春天。 每个元素具有由最小值,优选值和最大值指定的范围。 间隙具有开发者指定的范围,或由
LayoutStyle
确定的范围。 范围为Component
S从确定Component
的getMinimumSize
,getPreferredSize
和getMaximumSize
方法。 另外,当添加Component
s时,您可以指定要使用的特定范围而不是组件的范围。Group
的范围由组的类型决定。ParallelGroup
的范围是其元素范围的最大值。SequentialGroup
的范围是其元素范围的总和。GroupLayout
独立对待每个轴。 也就是说,存在表示水平轴的组和表示垂直轴的组。 水平组负责确定沿水平轴的最小尺寸,优选尺寸和最大尺寸,以及设置其中包含的组件的x和宽度。 垂直组负责确定沿垂直轴的最小尺寸,最小尺寸和最大尺寸,以及设置其中包含的组件的y和高度。 每个Component
必须存在于水平和垂直组中,否则在布局期间抛出IllegalStateException
,或者要求最小,优选或最大大小时。下图显示沿水平轴的顺序组。 顺序组包含三个组件。 沿垂直轴使用平行组。
为了加强每个轴的独立处理,该图显示了每个轴和每个轴上的每个组的范围。 每个组件的范围已投影到轴上,组将呈现为蓝色(水平)和红色(垂直)。 为了可读性,顺序组中的每个元素之间存在间隙。
沿着水平轴的顺序组呈现为实线蓝线。 注意顺序组是它包含的子元素的总和。
沿着垂直轴,平行组是每个部件的最大高度。 由于所有三个部件具有相同的高度,平行组具有相同的高度。
下图显示了相同的三个组件,但沿着水平轴的平行组和沿垂直轴的顺序组。
由于
c1
是三个组件中最大的,并行组的大小为c1
。 由于c2
和c3
小于c1
它们将基于为组件(如果指定)指定的对齐方式或并行组的默认对齐方式对齐。 在图c2
和c3
中创建的对齐方式为LEADING
。 如果组件方向从右到左,则c2
和c3
将位于相对侧。下图显示了沿水平轴和垂直轴的顺序组。
GroupLayout
提供了在Component
之间插入间隙的能力。 差距的大小由LayoutStyle
的实例确定。 这可以使用setAutoCreateGaps
方法打开。 类似地,您可以使用setAutoCreateContainerGaps
方法在接触父容器和容器边缘的组件之间插入间隙。以下构建一个由一列中的两个标签组成的面板,后面是两列文本框:
JComponent panel = ...; GroupLayout layout = new GroupLayout(panel); panel.setLayout(layout); // Turn on automatically adding gaps between components layout.setAutoCreateGaps(true); // Turn on automatically creating gaps between components that touch // the edge of the container and the container. layout.setAutoCreateContainerGaps(true); // Create a sequential group for the horizontal axis. GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); // The sequential group in turn contains two parallel groups. // One parallel group contains the labels, the other the text fields. // Putting the labels in a parallel group along the horizontal axis // positions them at the same x location. // // Variable indentation is used to reinforce the level of grouping. hGroup.addGroup(layout.createParallelGroup(). addComponent(label1).addComponent(label2)); hGroup.addGroup(layout.createParallelGroup(). addComponent(tf1).addComponent(tf2)); layout.setHorizontalGroup(hGroup); // Create a sequential group for the vertical axis. GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); // The sequential group contains two parallel groups that align // the contents along the baseline. The first parallel group contains // the first label and text field, and the second parallel group contains // the second label and text field. By using a sequential group // the labels and text fields are positioned vertically after one another. vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label1).addComponent(tf1)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label2).addComponent(tf2)); layout.setVerticalGroup(vGroup);
运行时产生以下内容。
此布局包括以下内容。
- 横轴由包含两个并行组的连续组组成。 第一个并行组包含标签,第二个并行组包含文本字段。
- 垂直轴由包含两个平行组的顺序组成。 这些并行组被配置成沿着基线对准其组件。 第一个并行组包含第一个标签和第一个文本字段,第二个组由第二个标签和第二个文本字段组成。
- 您不需要明确地将组件添加到容器中; 这是间接通过使用
add
方法之一的Group
。 - 各种
add
方法返回调用者。 这样可以方便地链接调用。 例如,group.addComponent(label1).addComponent(label2);
相当于group.addComponent(label1); group.addComponent(label2);
。 - 没有公共建设者
Group
s; 而是使用create方法GroupLayout
。
- 从以下版本开始:
- 1.6
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
GroupLayout.Alignment
枚举可能的方式ParallelGroup
可以对ParallelGroup
。class
GroupLayout.Group
Group
为GroupLayout
支持的两种类型的操作提供了基础:一个接一个地布置组件(SequentialGroup
)或对齐(ParallelGroup
)。class
GroupLayout.ParallelGroup
AGroup
对齐和调整它的孩子的大小。class
GroupLayout.SequentialGroup
AGroup
依次顺序地定位和调整其元素的大小。
-
Field Summary
Fields Modifier and Type Field 描述 static int
DEFAULT_SIZE
表示组件或间隙的尺寸应用于特定范围值。static int
PREFERRED_SIZE
表示组件或间隙的首选尺寸应用于特定范围值。
-
构造方法摘要
构造方法 Constructor 描述 GroupLayout(Container host)
创建GroupLayout
为指定Container
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
addLayoutComponent(Component component, Object constraints)
通知已将Component
添加到父容器。void
addLayoutComponent(String name, Component component)
通知已将Component
添加到父容器。GroupLayout.ParallelGroup
createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
创建并返回一个ParallelGroup
,使其沿着基线的元素对齐。GroupLayout.ParallelGroup
createParallelGroup()
创建并返回ParallelGroup
,对齐方式为Alignment.LEADING
。GroupLayout.ParallelGroup
createParallelGroup(GroupLayout.Alignment alignment)
创建并返回具有指定对齐方式的ParallelGroup
。GroupLayout.ParallelGroup
createParallelGroup(GroupLayout.Alignment alignment, boolean resizable)
创建并返回具有指定对齐和调整大小行为的ParallelGroup
。GroupLayout.SequentialGroup
createSequentialGroup()
创建并返回一个SequentialGroup
。boolean
getAutoCreateContainerGaps()
返回true
如果容器和容器边界的组件之间的间隙自动创建。boolean
getAutoCreateGaps()
如果自动创建组件之间的间隙,则返回true
。boolean
getHonorsVisibility()
返回在确定组件的大小和位置时是否考虑组件可见性。float
getLayoutAlignmentX(Container parent)
返回沿x轴的对齐方式。float
getLayoutAlignmentY(Container parent)
返回沿着y轴的对齐。LayoutStyle
getLayoutStyle()
返回用于计算组件之间的首选间隙的LayoutStyle
。void
invalidateLayout(Container parent)
使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。void
layoutContainer(Container parent)
放出指定的容器。void
linkSize(int axis, Component... components)
强制指定的组件沿指定的轴具有相同的大小,而不管其首选,最小或最大尺寸。void
linkSize(Component... components)
强制指定的组件具有相同的大小,无论其首选,最小或最大大小如何。Dimension
maximumLayoutSize(Container parent)
返回指定容器的最大大小。Dimension
minimumLayoutSize(Container parent)
返回指定容器的最小大小。Dimension
preferredLayoutSize(Container parent)
返回指定容器的首选大小。void
removeLayoutComponent(Component component)
通知已从父容器中删除Component
。void
replace(Component existingComponent, Component newComponent)
用新的组件代替现有组件。void
setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
设置是否自动创建容器和组件之间接触容器边界的间隙。void
setAutoCreateGaps(boolean autoCreatePadding)
设置是否自动创建组件之间的间隙。void
setHonorsVisibility(boolean honorsVisibility)
设置在组件尺寸和定位时是否考虑组件可见性。void
setHonorsVisibility(Component component, Boolean honorsVisibility)
设置组件的可见性是否考虑到尺寸和定位。void
setHorizontalGroup(GroupLayout.Group group)
设置Group
位置和大小沿水平轴的组件。void
setLayoutStyle(LayoutStyle layoutStyle)
设置LayoutStyle
用于计算组件之间的首选间隙。void
setVerticalGroup(GroupLayout.Group group)
设置Group
位置和尺寸沿垂直轴的部件。String
toString()
返回此GroupLayout
的字符串表示GroupLayout
。
-
-
-
构造方法详细信息
-
GroupLayout
public GroupLayout(Container host)
创建GroupLayout
为指定Container
。- 参数
-
host
-Container
的GroupLayout
是LayoutManager
为 - 异常
-
IllegalArgumentException
- 如果主机是null
-
-
方法详细信息
-
setHonorsVisibility
public void setHonorsVisibility(boolean honorsVisibility)
设置在组件尺寸和定位时是否考虑组件可见性。 值为true
表示不可见组件不应被视为布局的一部分。 值为false
表示组件应定位和大小,而不管可见性如何。当动态调整组件的可见性,并且不希望使用周围组件和大小调整时,值为
false
值很有用。指定的值用于没有指定明确可见性的组件。
默认值为
true
。- 参数
-
honorsVisibility
- 在确定组件尺寸和定位时是否考虑组件可见性 - 另请参见:
-
setHonorsVisibility(Component,Boolean)
-
getHonorsVisibility
public boolean getHonorsVisibility()
返回在确定组件的大小和位置时是否考虑组件可见性。- 结果
- 组件的尺寸和定位是否考虑组件的可视性
-
setHonorsVisibility
public void setHonorsVisibility(Component component, Boolean honorsVisibility)
设置组件的可见性是否考虑到尺寸和定位。 值Boolean.TRUE
表示如果component
不可见,则不应将其视为布局的一部分。 值为false
表示component
的位置和大小,无论其可见性如何。 值null
表示应该使用单参数方法指定的值setHonorsVisibility
。如果
component
不是Container
这个GroupLayout
正在管理的孩子,它将被添加到Container
。- 参数
-
component
- 组件 -
honorsVisibility
- 是否应考虑此component
的尺寸和定位的可见性 - 异常
-
IllegalArgumentException
- 如果component
是null
- 另请参见:
-
setHonorsVisibility(Component,Boolean)
-
setAutoCreateGaps
public void setAutoCreateGaps(boolean autoCreatePadding)
设置是否自动创建组件之间的间隙。 例如,如果这是true
并且您将两个组件添加到一个SequentialGroup
则会自动创建两个组件之间的间隙。 默认值为false
。- 参数
-
autoCreatePadding
- 是否自动创建组件之间的间隙
-
getAutoCreateGaps
public boolean getAutoCreateGaps()
如果组件之间的间隙自动创建,则返回true
。- 结果
-
true
如果组件之间的间隙自动创建
-
setAutoCreateContainerGaps
public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
设置是否自动创建容器和组件之间接触容器边界的间隙。 默认值为false
。- 参数
-
autoCreateContainerPadding
- 是否应自动创建容器和组件之间接触容器边界的间隙
-
getAutoCreateContainerGaps
public boolean getAutoCreateContainerGaps()
如果自动创建容器和容器边界的组件之间的间隙,则返回true
。- 结果
-
true
如果容器和与容器之间的组件之间的间隙自动创建
-
setHorizontalGroup
public void setHorizontalGroup(GroupLayout.Group group)
设置Group
位置和大小沿水平轴的组件。- 参数
-
group
- 沿着水平轴位置和大小的部件的Group
- 异常
-
IllegalArgumentException
- 如果组是null
-
setVerticalGroup
public void setVerticalGroup(GroupLayout.Group group)
设置Group
位置和尺寸沿垂直轴的部件。- 参数
-
group
-Group
这些位置和大小沿垂直轴的部件 - 异常
-
IllegalArgumentException
- 如果组是null
-
createSequentialGroup
public GroupLayout.SequentialGroup createSequentialGroup()
创建并返回一个SequentialGroup
。- 结果
-
一个新的
SequentialGroup
-
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup()
创建并返回ParallelGroup
,对齐方式为Alignment.LEADING
。 这是一种更为普遍的createParallelGroup(Alignment)
方法的覆盖方法。- 结果
-
一个新的
ParallelGroup
- 另请参见:
-
createParallelGroup(Alignment)
-
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment)
创建并返回具有指定对齐方式的ParallelGroup
。 这是更一般的覆盖方法createParallelGroup(Alignment,boolean)
方法与true
用于第二参数提供。- 参数
-
alignment
- 组的元素的对齐 - 结果
-
一个新的
ParallelGroup
- 异常
-
IllegalArgumentException
- 如果alignment
是null
- 另请参见:
-
createBaselineGroup(boolean, boolean)
,GroupLayout.ParallelGroup
-
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable)
创建并返回具有指定对齐和调整大小行为的ParallelGroup
。alignment
参数指定如何定位未填充组的子元素。 例如,如果一个ParallelGroup
用的对准TRAILING
给出100和子只需要50,子被定位在位置50(具有一个组件方向左到右)。基线对齐仅在沿垂直轴使用时有用。 使用沿水平轴的基线对齐创建的
ParallelGroup
被视为LEADING
。有关基准组的行为的详细信息,请参阅
ParallelGroup
。- 参数
-
alignment
- 组的元素的对齐 -
resizable
-true
如果组可调整大小; 如果组不可调整,则优选大小用于组的最小和最大大小 - 结果
-
一个新的
ParallelGroup
- 异常
-
IllegalArgumentException
- 如果alignment
是null
- 另请参见:
-
createBaselineGroup(boolean, boolean)
,GroupLayout.ParallelGroup
-
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
创建并返回一个ParallelGroup
,使其沿着基线的元素对齐。- 参数
-
resizable
- 组是否可调整大小 -
anchorBaselineToTop
- 基线是否固定在组的顶部或底部 - 结果
-
ParallelGroup
- 另请参见:
-
createBaselineGroup(boolean, boolean)
,GroupLayout.ParallelGroup
-
linkSize
public void linkSize(Component... components)
强制指定的组件具有相同的大小,无论其首选,最小或最大大小如何。 链接的组件被赋予每个链接组件的首选大小的最大值。 例如,如果将两个组件的首选宽度为10和20相连,则两个组件的宽度为20。这可以多次使用来强制任意数量的组件共享相同的大小。
链接的组件不可调整大小。
- 参数
-
components
- 要具有相同大小的Component
- 异常
-
IllegalArgumentException
- 如果components
是null
,或包含null
- 另请参见:
-
linkSize(int,Component[])
-
linkSize
public void linkSize(int axis, Component... components)
强制指定的组件沿指定的轴具有相同的大小,而不管其首选,最小或最大尺寸。 链接的组件被赋予每个链接组件的首选大小的最大值。 例如,如果沿水平轴连接两个组件,并且首选宽度为10和20,则两个组件的宽度为20。这可以多次使用来强制任意数量的组件共享相同的大小。
链接
Component
不能调整大小。- 参数
-
axis
- 链接大小的轴;SwingConstants.HORIZONTAL
或SwingConstants.VERTICAL
-
components
- 要具有相同大小的Component
s - 异常
-
IllegalArgumentException
- 如果components
是null
,或包含null
; 或axis
不是SwingConstants.HORIZONTAL
或SwingConstants.VERTICAL
-
replace
public void replace(Component existingComponent, Component newComponent)
用新的组件代替现有组件。- 参数
-
existingComponent
- 应该删除并替换为newComponent
-
newComponent
- 要放入existingComponent
的地方的组件 - 异常
-
IllegalArgumentException
- 如果任一组件是null
或existingComponent
未被此布局管理器管理
-
setLayoutStyle
public void setLayoutStyle(LayoutStyle layoutStyle)
设置LayoutStyle
用于计算组件之间的首选间隙。 值为null
表示应使用共享实例LayoutStyle
。- 参数
-
layoutStyle
- 要使用的LayoutStyle
- 另请参见:
-
LayoutStyle
-
getLayoutStyle
public LayoutStyle getLayoutStyle()
返回用于计算组件之间的首选间隙的LayoutStyle
。 这将返回值为setLayoutStyle
,其值可能为null
。- 结果
-
用于计算组件之间的优选间隙的
LayoutStyle
-
addLayoutComponent
public void addLayoutComponent(String name, Component component)
通知已将Component
添加到父容器。 你不应该直接调用此方法,而应该使用的一个Group
方法来添加一个Component
。- Specified by:
-
addLayoutComponent
在接口LayoutManager
- 参数
-
name
- 与组件关联的字符串 -
component
- 要添加的Component
-
removeLayoutComponent
public void removeLayoutComponent(Component component)
通知已从主容器中删除Component
。 您不应该直接调用此方法,而是在父Container
remove
上调用Container
。- Specified by:
-
removeLayoutComponent
在接口LayoutManager
- 参数
-
component
- 要删除的组件 - 另请参见:
-
Component.remove(java.awt.MenuComponent)
-
preferredLayoutSize
public Dimension preferredLayoutSize(Container parent)
返回指定容器的首选大小。- Specified by:
-
preferredLayoutSize
在接口LayoutManager
- 参数
-
parent
- 返回首选大小的容器 - 结果
-
parent
的首选尺寸 - 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与 -
IllegalStateException
- 如果添加到此布局的任何组件不在水平和垂直组中 - 另请参见:
-
Container.getPreferredSize()
-
minimumLayoutSize
public Dimension minimumLayoutSize(Container parent)
返回指定容器的最小大小。- Specified by:
-
minimumLayoutSize
在接口LayoutManager
- 参数
-
parent
- 返回大小的容器 - 结果
-
最小尺寸为
parent
- 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与 -
IllegalStateException
- 如果添加到此布局中的任何组件不在水平和垂直组中 - 另请参见:
-
Container.getMinimumSize()
-
layoutContainer
public void layoutContainer(Container parent)
放出指定的容器。- Specified by:
-
layoutContainer
在接口LayoutManager
- 参数
-
parent
- 要布置的容器 - 异常
-
IllegalStateException
- 如果添加到此布局的任何组件不在水平和垂直组中
-
addLayoutComponent
public void addLayoutComponent(Component component, Object constraints)
通知已将Component
添加到父容器。 你不应该直接调用此方法,而应该使用的一个Group
方法来添加一个Component
。- Specified by:
-
addLayoutComponent
在接口LayoutManager2
- 参数
-
component
- 添加的组件 -
constraints
- 说明放置组件的位置
-
maximumLayoutSize
public Dimension maximumLayoutSize(Container parent)
返回指定容器的最大大小。- Specified by:
-
maximumLayoutSize
在接口LayoutManager2
- 参数
-
parent
- 返回尺寸的容器 - 结果
-
最大尺寸为
parent
- 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与 -
IllegalStateException
- 如果添加到此布局的任何组件不在水平和垂直组中 - 另请参见:
-
Container.getMaximumSize()
-
getLayoutAlignmentX
public float getLayoutAlignmentX(Container parent)
返回沿x轴的对齐方式。 这指定了组件如何相对于其他组件进行对齐。 该值应为0到1之间的数字,其中0表示原点对齐,1对齐最远离原点,0.5为中心等。- Specified by:
-
getLayoutAlignmentX
在接口LayoutManager2
- 参数
-
parent
-Container
托管这个LayoutManager
- 结果
-
对齐;
此实现返回
.5
- 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与
-
getLayoutAlignmentY
public float getLayoutAlignmentY(Container parent)
返回沿着y轴的对齐。 这指定了组件如何相对于其他组件进行对齐。 该值应为0到1之间的数字,其中0表示原点对齐,1对齐最远离原点,0.5为中心等。- Specified by:
-
getLayoutAlignmentY
在接口LayoutManager2
- 参数
-
parent
-Container
托管这个LayoutManager
- 结果
-
对准;
此实现返回
.5
- 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与
-
invalidateLayout
public void invalidateLayout(Container parent)
使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。- Specified by:
-
invalidateLayout
在接口LayoutManager2
- 参数
-
parent
- 托管此LayoutManager的Container
- 异常
-
IllegalArgumentException
- 如果parent
是不一样的Container
这是创建与
-
-