- 所有已实现的接口:
-
LayoutManager
,LayoutManager2
GroupLayout
是一种LayoutManager
,用于按层次分组组件以将它们定位在Container
中。GroupLayout
旨在供构建者使用,但也可以手动编码。分组是通过Group
类的实例完成的。GroupLayout
支持两种类型的组。顺序组按顺序定位其子元素,一个接一个地。并行组以四种方式之一对齐其子元素。
每个组可以包含任意数量的元素,其中元素可以是Group
、Component
或间隙。间隙可以被视为具有最小、首选和最大大小的不可见组件。此外,GroupLayout
支持首选间隙,其值来自LayoutStyle
。
元素类似于弹簧。每个元素都有一个由最小、首选和最大指定的范围。间隙具有开发人员指定的范围,或者由LayoutStyle
确定的范围。对于Component
的范围是从Component
的getMinimumSize
、getPreferredSize
和getMaximumSize
方法确定的。此外,在添加Component
时,您可以指定要使用的特定范围,而不是来自组件的范围。 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); // 打开在组件之间自动添加间隙 layout.setAutoCreateGaps(true); // 打开在组件之间自动创建触及容器边缘和容器之间的间隙 layout.setAutoCreateContainerGaps(true); // 为水平轴创建一个顺序组 GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); // 顺序组又包含两个并行组。 // 一个并行组包含标签,另一个包含文本字段。 // 将标签放在水平轴上的并行组中 // 将它们定位在相同的x位置。 // // 使用可变缩进来强调分组级别。 hGroup.addGroup(layout.createParallelGroup(). addComponent(label1).addComponent(label2)); hGroup.addGroup(layout.createParallelGroup(). addComponent(tf1).addComponent(tf2)); layout.setHorizontalGroup(hGroup); // 为垂直轴创建一个顺序组。 GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); // 顺序组包含两个并行组,沿基线对齐内容。 // 第一个并行组包含第一个标签和文本字段,第二个并行组包含第二个标签和文本字段。 // 通过使用顺序组,标签和文本字段在垂直方向上依次定位。 vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label1).addComponent(tf1)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label2).addComponent(tf2)); layout.setVerticalGroup(vGroup);
运行后会产生以下结果。
此布局包括以下内容。
- 水平轴包括一个包含两个并行组的顺序组。第一个并行组包含标签,第二个并行组包含文本字段。
- 垂直轴包括一个包含两个并行组的顺序组。并行组配置为沿基线对齐其组件。第一个并行组包含第一个标签和第一个文本字段,第二个组包含第二个标签和第二个文本字段。
- 您无需显式将组件添加到容器中;这是通过使用
Group
的add
方法之一间接完成的。 - 各种
add
方法返回调用者。这样可以轻松地链接调用。例如,group.addComponent(label1).addComponent(label2);
等同于group.addComponent(label1); group.addComponent(label2);
。 Group
没有公共构造函数;而是使用GroupLayout
的创建方法。
- 自JDK版本:
- 1.6
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
ParallelGroup
可以对其子元素进行对齐的可能方式的枚举。class
class
对其子元素进行对齐和调整大小的Group
。final class
依次对其元素进行定位和调整大小的Group
。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final int
表示应使用组件或间隙的大小作为特定范围值。static final int
表示应使用组件或间隙的首选大小作为特定范围值。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addLayoutComponent
(Component component, Object constraints) 通知已将Component
添加到父容器。void
addLayoutComponent
(String name, Component component) 通知已将Component
添加到父容器。createBaselineGroup
(boolean resizable, boolean anchorBaselineToTop) 创建并返回一个沿基线对齐其元素的ParallelGroup
。创建并返回一个具有Alignment.LEADING
对齐的ParallelGroup
。createParallelGroup
(GroupLayout.Alignment alignment) 创建并返回一个具有指定对齐方式的ParallelGroup
。createParallelGroup
(GroupLayout.Alignment alignment, boolean resizable) 创建并返回一个具有指定对齐方式和调整大小行为的ParallelGroup
。创建并返回一个SequentialGroup
。boolean
如果自动创建容器和边框容器之间的间隙,则返回true
。boolean
如果自动创建组件之间的间隙,则返回true
。boolean
返回在调整大小和定位组件时是否考虑组件的可见性。float
getLayoutAlignmentX
(Container parent) 返回沿x轴的对齐方式。float
getLayoutAlignmentY
(Container parent) 返回沿y轴的对齐方式。返回用于计算组件之间首选间隙的LayoutStyle
。void
invalidateLayout
(Container parent) 使布局无效,表示如果布局管理器缓存了信息,则应丢弃该信息。void
layoutContainer
(Container parent) 对指定的容器进行布局。void
强制指定的组件沿指定轴具有相同的大小,而不考虑其首选、最小或最大大小。void
强制指定的组件具有相同的大小,而不考虑其首选、最小或最大大小。maximumLayoutSize
(Container parent) 返回指定容器的最大大小。minimumLayoutSize
(Container parent) 返回指定容器的最小大小。preferredLayoutSize
(Container parent) 返回指定容器的首选大小。void
removeLayoutComponent
(Component component) 通知一个Component
已从父容器中移除。void
用新组件替换现有组件。void
setAutoCreateContainerGaps
(boolean autoCreateContainerPadding) 设置是否应自动创建容器和边框接触的组件之间的间隙。void
setAutoCreateGaps
(boolean autoCreatePadding) 设置是否应自动创建组件之间的间隙。void
setHonorsVisibility
(boolean honorsVisibility) 设置在调整大小和定位组件时是否考虑组件的可见性。void
setHonorsVisibility
(Component component, Boolean honorsVisibility) 设置是否应考虑组件的可见性以进行大小和定位。void
设置沿水平轴定位和调整组件大小的Group
。void
setLayoutStyle
(LayoutStyle layoutStyle) 设置用于计算组件之间首选间隙的LayoutStyle
。void
设置沿垂直轴定位和调整组件大小的Group
。toString()
返回此GroupLayout
的字符串表示形式。
-
Field Details
-
DEFAULT_SIZE
public static final int DEFAULT_SIZE指示应使用组件或间隙的大小作为特定范围值的大小。- 参见:
-
PREFERRED_SIZE
public static final int PREFERRED_SIZE指示应使用组件或间隙的首选大小作为特定范围值的大小。- 参见:
-
-
Constructor Details
-
GroupLayout
为指定的Container
创建一个GroupLayout
。- 参数:
-
host
-GroupLayout
为其是LayoutManager
的Container
- 抛出:
-
IllegalArgumentException
- 如果host为null
-
-
Method Details
-
setHonorsVisibility
public void setHonorsVisibility(boolean honorsVisibility) 设置在调整大小和定位组件时是否考虑组件的可见性。值为true
表示不可见组件不应视为布局的一部分。值为false
表示无论可见性如何,组件都应定位和调整大小。当组件的可见性动态调整且不希望周围组件和大小发生变化时,值为
false
是有用的。指定的值用于未明确指定可见性的组件。
默认值为
true
。- 参数:
-
honorsVisibility
- 在调整大小和定位组件时是否考虑组件的可见性 - 参见:
-
getHonorsVisibility
public boolean getHonorsVisibility()返回在调整大小和定位组件时是否考虑组件的可见性。- 返回:
- 在调整大小和定位组件时是否考虑组件的可见性
-
setHonorsVisibility
设置是否应考虑组件的可见性以进行大小和定位。值为Boolean.TRUE
表示如果component
不可见,则不应将其视为布局的一部分。值为false
表示无论可见性如何,都应定位和调整component
的大小。值为null
表示应使用单参数方法setHonorsVisibility
指定的值。如果
component
不是此GroupLayout
管理的Container
的子级,则将其添加到Container
中。- 参数:
-
component
- 组件 -
honorsVisibility
- 是否应考虑此component
的可见性以进行大小和定位 - 抛出:
-
IllegalArgumentException
- 如果component
为null
- 参见:
-
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
设置沿水平轴定位和调整组件大小的Group
。- 参数:
-
group
- 沿水平轴定位和调整组件大小的Group
- 抛出:
-
IllegalArgumentException
- 如果group为null
-
setVerticalGroup
设置沿垂直轴定位和调整组件大小的Group
。- 参数:
-
group
- 沿垂直轴定位和调整组件大小的Group
- 抛出:
-
IllegalArgumentException
- 如果group为null
-
createSequentialGroup
创建并返回一个SequentialGroup
。- 返回:
-
一个新的
SequentialGroup
-
createParallelGroup
创建并返回一个对齐方式为Alignment.LEADING
的ParallelGroup
。这是更一般的createParallelGroup(Alignment)
方法的封装方法。- 返回:
-
一个新的
ParallelGroup
- 参见:
-
createParallelGroup
创建并返回一个具有指定对齐方式的ParallelGroup
。这是具有true
作为第二参数提供的更一般的createParallelGroup(Alignment,boolean)
方法的封装方法。- 参数:
-
alignment
- 组的元素的对齐方式 - 返回:
-
一个新的
ParallelGroup
- 抛出:
-
IllegalArgumentException
- 如果alignment
为null
- 参见:
-
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable) 创建并返回一个具有指定对齐方式和调整大小行为的ParallelGroup
。alignment
参数指定未填充组的子元素的位置。例如,如果给定对齐方式为TRAILING
的ParallelGroup
为100,而子元素只需要50,则子元素将位于位置50(具有从左到右的组件方向)。基线对齐仅在沿垂直轴使用时有用。使用沿水平轴创建的具有基线对齐的
ParallelGroup
将被视为LEADING
。有关基线组行为的详细信息,请参阅
ParallelGroup
。- 参数:
-
alignment
- 组的元素的对齐方式 -
resizable
- 如果组可调整大小,则为true
;如果组不可调整大小,则使用首选大小作为组的最小和最大大小 - 返回:
-
一个新的
ParallelGroup
- 抛出:
-
IllegalArgumentException
- 如果alignment
为null
- 参见:
-
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop) 创建并返回一个沿基线对齐其元素的ParallelGroup
。- 参数:
-
resizable
- 组是否可调整大小 -
anchorBaselineToTop
- 基线是锚定到组的顶部还是底部 - 返回:
-
ParallelGroup
- 参见:
-
linkSize
强制指定的组件具有相同的大小,而不考虑它们的首选、最小或最大大小。链接的组件将获得链接组件的首选大小的最大值。例如,如果链接两个首选宽度分别为10和20的组件,则两个组件的宽度都将为20。可以多次使用此方法来强制任意数量的组件共享相同的大小。
链接的组件不可调整大小。
- 参数:
-
components
- 应具有相同大小的Component
- 抛出:
-
IllegalArgumentException
- 如果components
为null
,或包含null
- 参见:
-
linkSize
强制指定的组件沿指定轴具有相同的大小,而不考虑它们的首选、最小或最大大小。链接的组件将获得链接组件的首选大小的最大值。例如,如果沿水平轴链接两个组件,首选宽度分别为10和20,则两个组件的宽度都将为20。可以多次使用此方法来强制任意数量的组件共享相同的大小。
链接的
Component
不可调整大小。- 参数:
-
axis
- 要沿其链接大小的轴;SwingConstants.HORIZONTAL
或SwingConstants.VERTICAL
之一 -
components
- 应具有相同大小的Component
- 抛出:
-
IllegalArgumentException
- 如果components
为null
,或包含null
;或axis
不是SwingConstants.HORIZONTAL
或SwingConstants.VERTICAL
-
replace
用新组件替换现有组件。- 参数:
-
existingComponent
- 应删除并替换为newComponent
的组件 -
newComponent
- 放置在existingComponent
位置的组件 - 抛出:
-
IllegalArgumentException
- 如果任一组件为null
或existingComponent
未由此布局管理器管理
-
setLayoutStyle
设置用于计算组件之间首选间隙的LayoutStyle
。值为null
表示应使用LayoutStyle
的共享实例。- 参数:
-
layoutStyle
- 要使用的LayoutStyle
- 参见:
-
getLayoutStyle
返回用于计算组件之间首选间隙的LayoutStyle
。这将返回指定给setLayoutStyle
的值,可能为null
。- 返回:
-
用于计算组件之间首选间隙的
LayoutStyle
-
addLayoutComponent
通知已将Component
添加到父容器。您不应直接调用此方法,而应使用Group
方法之一来添加Component
。- 指定者:
-
addLayoutComponent
在接口LayoutManager
- 参数:
-
name
- 与组件关联的字符串 -
component
- 要添加的Component
-
removeLayoutComponent
通知已将Component
从父容器中移除。您不应直接调用此方法,而应在父Container
上调用remove
。- 指定者:
-
removeLayoutComponent
在接口LayoutManager
- 参数:
-
component
- 要移除的组件 - 参见:
-
preferredLayoutSize
返回指定容器的首选大小。- 指定者:
-
preferredLayoutSize
在接口LayoutManager
- 参数:
-
parent
- 要返回首选大小的容器 - 返回:
-
parent
的首选大小 - 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同 -
IllegalStateException
- 如果添加到此布局的任何组件既不在水平组中也不在垂直组中 - 参见:
-
minimumLayoutSize
返回指定容器的最小大小。- 指定者:
-
minimumLayoutSize
在接口LayoutManager
- 参数:
-
parent
- 要返回大小的容器 - 返回:
-
parent
的最小大小 - 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同 -
IllegalStateException
- 如果添加到此布局的任何组件既不在水平组中也不在垂直组中 - 参见:
-
layoutContainer
对指定容器进行布局。- 指定者:
-
layoutContainer
在接口LayoutManager
- 参数:
-
parent
- 要布局的容器 - 抛出:
-
IllegalStateException
- 如果添加到此布局的任何组件既不在水平组中也不在垂直组中
-
addLayoutComponent
通知已将Component
添加到父容器。您不应直接调用此方法,而应使用Group
方法之一来添加Component
。- 指定者:
-
addLayoutComponent
在接口LayoutManager2
- 参数:
-
component
- 要添加的组件 -
constraints
- 放置组件的描述
-
maximumLayoutSize
返回指定容器的最大大小。- 指定者:
-
maximumLayoutSize
在接口LayoutManager2
- 参数:
-
parent
- 要返回大小的容器 - 返回:
-
parent
的最大大小 - 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同 -
IllegalStateException
- 如果添加到此布局的任何组件既不在水平组中也不在垂直组中 - 参见:
-
getLayoutAlignmentX
返回沿x轴的对齐方式。这指定组件希望相对于其他组件对齐的方式。该值应为介于0和1之间的数字,其中0表示沿原点对齐,1表示与原点最远的对齐,0.5表示居中对齐,等等。- 指定由:
-
getLayoutAlignmentX
在接口LayoutManager2
- 参数:
-
parent
- 托管此LayoutManager
的Container
- 返回:
-
对齐方式; 此实现返回
.5
- 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同
-
getLayoutAlignmentY
返回沿y轴的对齐方式。这指定了组件希望相对于其他组件对齐的方式。该值应为介于0和1之间的数字,其中0表示沿原点对齐,1表示与原点最远对齐,0.5表示居中,依此类推。- 指定由:
-
getLayoutAlignmentY
在接口LayoutManager2
- 参数:
-
parent
- 托管此LayoutManager
的Container
- 返回:
-
对齐方式; 此实现返回
.5
- 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同
-
invalidateLayout
使布局失效,表示如果布局管理器缓存了信息,则应丢弃该信息。- 指定由:
-
invalidateLayout
在接口LayoutManager2
- 参数:
-
parent
- 托管此LayoutManager
的Container
- 抛出:
-
IllegalArgumentException
- 如果parent
与创建此对象的Container
不同
-
toString
返回此GroupLayout
的字符串表示形式。此方法旨在用于调试目的,返回的字符串的内容和格式可能因实现而异。
-