- java.lang.Object
-
- javax.swing.SpringLayout
-
- All Implemented Interfaces:
-
LayoutManager
,LayoutManager2
public class SpringLayout extends Object implements LayoutManager2
ASpringLayout
根据一组约束规定了其关联容器的子项。 见How to Use SpringLayout中的Java教程使用的例子SpringLayout
。由
Spring
对象表示的每个约束控制两个组件边缘之间的垂直或水平距离。 边缘可以属于容器的任何孩子,也可以属于容器本身。 例如,可以使用控制组件的西(左)和东(右)边之间的距离的约束来表示组件的允许宽度。 组件的允许的y坐标可以通过限制组件的北(顶部)边缘与其容器的北边缘之间的距离来表示。SpringLayout
控制的容器的每个孩子以及容器本身都具有与之相关的一组限制。 这些约束由一个SpringLayout.Constraints
对象表示。 默认情况下,SpringLayout
产生约束,使他们的相关组件具有最小,首选,和组件的最大返回大小Component.getMinimumSize()
,Component.getPreferredSize()
,并Component.getMaximumSize()
种方法。 x和y位置最初不受约束,因此在限制它们之前,Component
将位于相对于父母Container
的Insets
的0,0。您可以通过多种方式更改组件的约束。 您可以使用其中一种
putConstraint
方法来建立一个连接同一容器中两个组件边缘的弹簧。 或者您可以使用getConstraints
获取适当的SpringLayout.Constraints
对象,然后修改其一个或多个弹簧。 或者您可以使用getConstraint
获取组件的特定边缘的弹簧,并进行修改。 您还可以通过在将组件添加到其容器中(使用Container.add(Component, Object)
)指定约束对象,将自己的SpringLayout.Constraints
对象与组件相关联。表示每个约束的
Spring
对象具有最小值,首选值,最大值和当前值。 根据Spring.sum(javax.swing.Spring, javax.swing.Spring)
方法描述中给出的公式,弹簧的当前值位于最小值和最大值之间。 当最小值,优选值和最大值相同时,当前值总是等于它们; 这个不灵活的弹簧叫做支柱 。 您可以使用出厂方法Spring.constant(int)
创建支柱。Spring
类还提供了制造其他类型弹簧的工厂方法,包括依靠其他弹簧的弹簧。在
SpringLayout
,每个边缘的位置取决于另一个边缘的位置。 如果随后添加约束以创建边缘的新约束,则先前的绑定被丢弃,并且边缘依赖于单个边缘。 弹簧只能附在容器的边缘及其直立的儿童之间; 当链接来自不同容器(内部或外部)的组件的边缘的约束时,SpringLayout
的行为是未定义的。SpringLayout与其他布局管理器
Note: Unlike many layout managers,SpringLayout
doesn't automatically set the location of the components it manages. If you hand-code a GUI that usesSpringLayout
, remember to initialize component locations by constraining the west/east and north/south locations.Depending on the constraints you use, you may also need to set the size of the container explicitly.
尽管
SpringLayout
的简单性,它可以模拟大多数其他布局管理器的行为。 对于某些功能,例如FlowLayout
提供的FlowLayout
,您需要创建一个Spring
类的专用子类。SpringLayout
还提供了一种解决许多困难的布局问题的方法,这些问题无法通过嵌套Box
es的组合来解决。SpringLayout
的LayoutManager2
SpringLayout
的布局操作的渐近复杂度在约束(和/或组件)的数量上是线性的。警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4版本开始,所有JavaBeans的长期存储支持已被添加到
java.beans
软件包中。 请参阅XMLEncoder
。- 从以下版本开始:
- 1.4
- 另请参见:
-
Spring
,SpringLayout.Constraints
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
SpringLayout.Constraints
一个Constraints
对象保存了控制由一个SpringLayout
控制的容器中组件的大小和位置变化方式的SpringLayout
。
-
Field Summary
Fields Modifier and Type Field 描述 static String
BASELINE
指定组件的基线。static String
EAST
指定组件的边界矩形的右边缘。static String
HEIGHT
指定组件的边界矩形的高度。static String
HORIZONTAL_CENTER
指定组件边界矩形的水平中心。static String
NORTH
指定组件的边界矩形的顶边。static String
SOUTH
指定组件边界矩形的下边缘。static String
VERTICAL_CENTER
指定组件的边界矩形的垂直中心。static String
WEST
指定组件的边界矩形的左边缘。static String
WIDTH
指定组件边界矩形的宽度。
-
构造方法摘要
构造方法 Constructor 描述 SpringLayout()
构造新的SpringLayout
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
addLayoutComponent(Component component, Object constraints)
如果constraints
是constraints
的实例,SpringLayout.Constraints
约束与指定的组件关联。void
addLayoutComponent(String name, Component c)
没有效果,因为此布局管理器不使用每个组件字符串。Spring
getConstraint(String edgeName, Component c)
返回控制组件的指定边缘与其父级的顶部或左侧边缘之间的距离的弹簧。SpringLayout.Constraints
getConstraints(Component c)
返回指定组件的约束。float
getLayoutAlignmentX(Container p)
返回0.5f(居中)。float
getLayoutAlignmentY(Container p)
返回0.5f(居中)。void
invalidateLayout(Container p)
使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。void
layoutContainer(Container parent)
放出指定的容器。Dimension
maximumLayoutSize(Container parent)
给定指定容器的最大尺寸尺寸,给定其包含的组件。Dimension
minimumLayoutSize(Container parent)
计算指定容器的最小尺寸尺寸,给定其包含的组件。Dimension
preferredLayoutSize(Container parent)
计算指定容器的首选大小尺寸,给定其包含的组件。void
putConstraint(String e1, Component c1, int pad, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
,边与边之间的距离固定。void
putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
。void
removeLayoutComponent(Component c)
删除与指定组件关联的约束。
-
-
-
字段详细信息
-
NORTH
public static final String NORTH
指定组件的边界矩形的顶边。- 另请参见:
- Constant Field Values
-
SOUTH
public static final String SOUTH
指定组件边界矩形的下边缘。- 另请参见:
- Constant Field Values
-
EAST
public static final String EAST
指定组件的边界矩形的右边缘。- 另请参见:
- Constant Field Values
-
WEST
public static final String WEST
指定组件的边界矩形的左边缘。- 另请参见:
- Constant Field Values
-
HORIZONTAL_CENTER
public static final String HORIZONTAL_CENTER
指定组件边界矩形的水平中心。- 从以下版本开始:
- 1.6
- 另请参见:
- Constant Field Values
-
VERTICAL_CENTER
public static final String VERTICAL_CENTER
指定组件的边界矩形的垂直中心。- 从以下版本开始:
- 1.6
- 另请参见:
- Constant Field Values
-
BASELINE
public static final String BASELINE
指定组件的基线。- 从以下版本开始:
- 1.6
- 另请参见:
- Constant Field Values
-
WIDTH
public static final String WIDTH
指定组件边界矩形的宽度。- 从以下版本开始:
- 1.6
- 另请参见:
- Constant Field Values
-
HEIGHT
public static final String HEIGHT
指定组件的边界矩形的高度。- 从以下版本开始:
- 1.6
- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
addLayoutComponent
public void addLayoutComponent(String name, Component c)
没有效果,因为此布局管理器不使用每个组件字符串。- Specified by:
-
addLayoutComponent
在接口LayoutManager
- 参数
-
name
- 与组件关联的字符串 -
c
- 要添加的组件
-
removeLayoutComponent
public void removeLayoutComponent(Component c)
删除与指定组件关联的约束。- Specified by:
-
removeLayoutComponent
在接口LayoutManager
- 参数
-
c
- 组件从容器中移除
-
minimumLayoutSize
public Dimension minimumLayoutSize(Container parent)
描述从接口LayoutManager
复制计算指定容器的最小尺寸尺寸,给定其包含的组件。- Specified by:
-
minimumLayoutSize
在接口LayoutManager
- 参数
-
parent
- 要布局的组件 - 结果
- 容器的最小尺寸
- 另请参见:
-
LayoutManager.preferredLayoutSize(java.awt.Container)
-
preferredLayoutSize
public Dimension preferredLayoutSize(Container parent)
描述从接口LayoutManager
复制计算指定容器的首选大小尺寸,给定其包含的组件。- Specified by:
-
preferredLayoutSize
在接口LayoutManager
- 参数
-
parent
- 要布置的容器 - 结果
- 容器的首选尺寸
- 另请参见:
-
LayoutManager.minimumLayoutSize(java.awt.Container)
-
maximumLayoutSize
public Dimension maximumLayoutSize(Container parent)
说明从接口LayoutManager2
复制给定指定容器的最大尺寸尺寸,给定其包含的组件。- Specified by:
-
maximumLayoutSize
在接口LayoutManager2
- 参数
-
parent
- 目标容器 - 结果
- 容器的最大尺寸
- 另请参见:
-
Component.getMaximumSize()
,LayoutManager
-
addLayoutComponent
public void addLayoutComponent(Component component, Object constraints)
如果constraints
是constraints
的实例,SpringLayout.Constraints
约束与指定的组件关联。- Specified by:
-
addLayoutComponent
在接口LayoutManager2
- 参数
-
component
- 要添加的组件 -
constraints
- 组件的约束 - 另请参见:
-
SpringLayout.Constraints
-
getLayoutAlignmentX
public float getLayoutAlignmentX(Container p)
返回0.5f(居中)。- Specified by:
-
getLayoutAlignmentX
在接口LayoutManager2
- 参数
-
p
- 目标容器 - 结果
- x轴对齐偏好
-
getLayoutAlignmentY
public float getLayoutAlignmentY(Container p)
返回0.5f(居中)。- Specified by:
-
getLayoutAlignmentY
在接口LayoutManager2
- 参数
-
p
- 目标容器 - 结果
- y轴对齐偏好
-
invalidateLayout
public void invalidateLayout(Container p)
描述从接口LayoutManager2
复制使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。- Specified by:
-
invalidateLayout
接口LayoutManager2
- 参数
-
p
- 目标容器
-
putConstraint
public void putConstraint(String e1, Component c1, int pad, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
,边与边之间的距离固定。 此约束将导致赋值value(e1, c1) = value(e2, c2) + pad
在所有后续布局操作期间进行。- 参数
-
e1
- 从属的边缘 -
c1
- 依赖的组件 -
pad
- 从属和锚之间的固定距离 -
e2
- 锚的边缘 -
c2
- 锚的组件 - 另请参见:
-
putConstraint(String, Component, Spring, String, Component)
-
putConstraint
public void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
。 边缘(e2, c2)
变化值,边缘(e1, c1)
将通过采取(春)和(e2, c2)
和s
。 每个边缘必须具有以下值之一:SpringLayout.NORTH
,SpringLayout.SOUTH
,SpringLayout.EAST
,SpringLayout.WEST
,SpringLayout.VERTICAL_CENTER
,SpringLayout.HORIZONTAL_CENTER
或SpringLayout.BASELINE
。- 参数
-
e1
- 从属的边缘 -
c1
- 依赖的组件 -
s
- 弹簧链接依赖和锚 -
e2
- 锚的边缘 -
c2
- 锚的组成部分 - 另请参见:
-
putConstraint(String, Component, int, String, Component)
,NORTH
,SOUTH
,EAST
,WEST
,VERTICAL_CENTER
,HORIZONTAL_CENTER
,BASELINE
-
getConstraints
public SpringLayout.Constraints getConstraints(Component c)
返回指定组件的约束。 请注意,与GridBagLayout
getConstraints
方法不同,此方法不克隆约束。 如果没有与此组件相关联的约束,则此方法将返回一个默认约束对象,该对象的位置相对于父级Insets为0,0.0,其宽度/高度被限制为组件的最小,最大和优选大小。 在调用该方法时,大小特征不会被冻结; 相反,该方法返回一个约束对象,其特征跟踪组件的特征,因为它们发生变化。- 参数
-
c
- 将返回约束的组件 - 结果
- 指定组件的约束
-
getConstraint
public Spring getConstraint(String edgeName, Component c)
返回控制组件的指定边缘与其父级的顶部或左侧边缘之间的距离的弹簧。 该方法不是返回边缘的当前绑定,而是返回一个跟踪边缘特征的代理,即使该边缘随后被反弹。 代理程序旨在用于构建器环境中,其中允许用户以任何顺序为布局定义约束是有用的。 然而,代理确实提供了在布局的约束之间创建循环依赖性的方法。 这样的循环在内部由SpringLayout
检测,使得布局操作总是终止。- 参数
-
edgeName
-必须之一SpringLayout.NORTH
,SpringLayout.SOUTH
,SpringLayout.EAST
,SpringLayout.WEST
,SpringLayout.VERTICAL_CENTER
,SpringLayout.HORIZONTAL_CENTER
或SpringLayout.BASELINE
-
c
- 需要边缘弹簧的部件 - 结果
- 用于控制指定边缘与其父节点的顶部或左边缘之间的距离的弹簧的代理
- 另请参见:
-
NORTH
,SOUTH
,EAST
,WEST
,VERTICAL_CENTER
,HORIZONTAL_CENTER
,BASELINE
-
layoutContainer
public void layoutContainer(Container parent)
描述从接口LayoutManager
复制放出指定的容器。- Specified by:
-
layoutContainer
在接口LayoutManager
- 参数
-
parent
- the container to be laid out
-
-