javax.swing

接口
异常
java.lang.Object
  继承者 javax.swing.SpringLayout
所有已实现的接口:
LayoutManager, LayoutManager2

public class SpringLayout
     
extends Object
implements LayoutManager2

SpringLayout 根据一组约束布置其相关容器的子组件。有关使用 SpringLayout 的示例,请参阅 The Java Tutorial 中的 How to Use SpringLayout 一节。

每个由 Spring 对象表示的约束控制着两个组件边之间的垂直距离或水平距离。这两个边属于容器的任一子级,或属于该容器本身。例如,可以使用控制某组件东(右)和西(左)边之间距离的约束表示该组件允许的宽度。某个组件所允许的 y 坐标可以通过约束该组件北(上)边和其容器的北边之间的距离表示。

SpringLayout 控制的容器的每个子级及其容器本身都有一组与其相关的约束。这些约束由一个 SpringLayout.Constraints 对象表示。默认情况下,SpringLayout 创建使其相关组件具有最小、首选和最大大小的约束,这几项大小都由该组件的 Component.getMinimumSize()Component.getPreferredSize()Component.getMaximumSize() 方法返回。xy 的位置最初不受约束,以便在约束它们之前将该 Component 定位在对应于父 ContainerInsets 的(0,0)位置。

有好几种可以更改组件约束的方式。可以使用某个 putConstraint 方法建立一个连接同一个容器内两个组件边的 spring。或者使用 getConstraints 获取适当 SpringLayout.Constraints,然后修改其中一个或多个 spring。或者使用 getConstraint 获取某个组件特定边的 spring,并修改它。还可以在将某个组件添加到其容器(使用 Container.add(Component, Object))时,通过指定自己的 SpringLayout.Constraints 对象,将该约束对象与该组件相关联。

表示每项约束的 Spring 对象都有最小、首选、最大和当前值。按照 Spring.sum(javax.swing.Spring, javax.swing.Spring) 方法描述中给定的公式,该 spring 的当前值介于最小值和最大值之间的某个位置。当最小、首选和最大值相同时,当前值始终与它们相等;此不灵活的 spring 被称作 strut。可以使用工厂方法 Spring.constant(int) 创建 strut。该 Spring 类还提供工厂方法,用于创建其他种类的 spring,包括依赖其他 spring 的 spring。

SpringLayout 中,每个边的位置只与其他一个边的位置有关。如果随后添加一个约束来创建某个边的新绑定,则以前的绑定会被丢弃,且该边保持与某单个边相关。Spring 只应在容器的两个边及其直接子级之间连接;当出现连接到不同容器(内部或外部)中组件边缘的约束时,该 SpringLayout 的行为是不确定的。

SpringLayout 与其他布局管理器的比较


注:与多数布局管理器不同, SpringLayout 不自动设置它管理的组件的位置。如果手工编写一个使用 SpringLayout 的 GUI,则要记住通过约束东/西和南/北的位置初始化组件的位置。

可能还需要明确设置容器的大小,具体取决于您使用的约束。


尽管 SpringLayout 简单易用,但它还要仿效其他多数布局管理器的行为。对于某些功能(如 FlowLayout 提供的行断开),需要创建一个 Spring 类的专用子类。

SpringLayout 还提供解决许多困难布局问题的方法,这些问题都不能通过嵌套 Box 的组合来解决。也就是说,SpringLayout 完全遵守 LayoutManager2 协定,因此可以使用其他布局管理器进行嵌套(一种创建其他布局管理器使用的约束的更好技术)。

SpringLayout 布局操作的渐进复杂性与约束(和/或组件)的数量呈线关系。

警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder

从以下版本开始:
1.4
另请参见:
Spring, SpringLayout.Constraints

嵌套类摘要
static class SpringLayout.Constraints
          Constraints 对象将管理组件大小和位置更改方式的约束存储在 SpringLayout 控制的容器中。
 
字段摘要
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
          指定组件边界矩形的宽度。
 
构造方法摘要
SpringLayout()
          构造一个新 SpringLayout
 
方法摘要
 void addLayoutComponent(Component component, Object constraints)
          如果 constraintsSpringLayout.Constraints 的一个实例,则将该约束与指定组件相关联。
 void addLayoutComponent(String name, Component c)
          无效,因为此布局管理器不使用每组件字符串。
 Spring getConstraint(String edgeName, Component c)
          返回控制该组件指定边及其父级的顶边或左边之间距离的 spring。
 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)
          将组件 c1 的边 e1 连接到组件 c2 的边 e2,边与边之间的距离固定。
 void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
          将组件 c1 的边 e1 连接到组件 c2 的边 e2
 void removeLayoutComponent(Component c)
          移除与指定组件相关的约束。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

NORTH

public static final String NORTH
指定组件的边界矩形的顶边。

另请参见:
常量字段值

SOUTH

public static final String SOUTH
指定组件的边界矩形的底边。

另请参见:
常量字段值

EAST

public static final String EAST
指定组件的边界矩形的右边。

另请参见:
常量字段值

WEST

public static final String WEST
指定组件的边界矩形的左边。

另请参见:
常量字段值

HORIZONTAL_CENTER

public static final String HORIZONTAL_CENTER
指定组件边界矩形的水平中央位置。

从以下版本开始:
1.6
另请参见:
常量字段值

VERTICAL_CENTER

public static final String VERTICAL_CENTER
指定组件的边界矩形的垂直中央位置。

从以下版本开始:
1.6
另请参见:
常量字段值

BASELINE

public static final String BASELINE
指定组件的基线。

从以下版本开始:
1.6
另请参见:
常量字段值

WIDTH

public static final String WIDTH
指定组件边界矩形的宽度。

从以下版本开始:
1.6
另请参见:
常量字段值

HEIGHT

public static final String HEIGHT
指定组件边界矩形的高度。

从以下版本开始:
1.6
另请参见:
常量字段值
构造方法详细信息

SpringLayout

public SpringLayout()
构造一个新 SpringLayout

方法详细信息

addLayoutComponent

public void addLayoutComponent(String name,
                               Component c)
无效,因为此布局管理器不使用每组件字符串。

指定者:
接口 LayoutManager 中的 addLayoutComponent
参数:
name - 要与组件关联的字符串
c - 要添加的组件

removeLayoutComponent

public void removeLayoutComponent(Component c)
移除与指定组件相关的约束。

指定者:
接口 LayoutManager 中的 removeLayoutComponent
参数:
c - 将从容器中移除的组件

minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
从接口 LayoutManager 复制的描述
给定指定容器所包含的组件,计算该容器的最小大小维数。

指定者:
接口 LayoutManager 中的 minimumLayoutSize
参数:
parent - 要布置的组件

preferredLayoutSize

public Dimension preferredLayoutSize(Container parent)
从接口 LayoutManager 复制的描述
给定指定容器所包含的组件,计算该容器的首选大小维数。

指定者:
接口 LayoutManager 中的 preferredLayoutSize
参数:
parent - 要布置的容器
另请参见:
LayoutManager.minimumLayoutSize(java.awt.Container)

maximumLayoutSize

public Dimension maximumLayoutSize(Container parent)
从接口 LayoutManager2 复制的描述
给定指定容器的组件,计算该容器的最大大小维数。

指定者:
接口 LayoutManager2 中的 maximumLayoutSize
另请参见:
Component.getMaximumSize(), LayoutManager

addLayoutComponent

public void addLayoutComponent(Component component,
                               Object constraints)
如果 constraintsSpringLayout.Constraints 的一个实例,则将该约束与指定组件相关联。

指定者:
接口 LayoutManager2 中的 addLayoutComponent
参数:
component - 正添加的组件
constraints - 该组件的约束
另请参见:
SpringLayout.Constraints

getLayoutAlignmentX

public float getLayoutAlignmentX(Container p)
返回 0.5f(居中)。

指定者:
接口 LayoutManager2 中的 getLayoutAlignmentX

getLayoutAlignmentY

public float getLayoutAlignmentY(Container p)
返回 0.5f(居中)。

指定者:
接口 LayoutManager2 中的 getLayoutAlignmentY

invalidateLayout

public void invalidateLayout(Container p)
从接口 LayoutManager2 复制的描述
使布局失效,指示如果布局管理器缓存了信息,则应该将其丢弃。

指定者:
接口 LayoutManager2 中的 invalidateLayout

putConstraint

public void putConstraint(String e1,
                          Component c1,
                          int pad,
                          String e2,
                          Component c2)
将组件 c1 的边 e1 连接到组件 c2 的边 e2,边与边之间的距离固定。此约束将导致赋值
     value(e1, c1) = value(e2, c2) + pad
在以后的所有布局操作期间发生。

参数:
e1 - 该 dependent 的边
c1 - 该 dependent 的组件
pad - dependent 和 anchor 之间的固定距离
e2 - 该 anchor 的边
c2 - 该 anchor 的组件
另请参见:
putConstraint(String, Component, Spring, String, Component)

putConstraint

public void putConstraint(String e1,
                          Component c1,
                          Spring s,
                          String e2,
                          Component c2)
将组件 c1 的边 e1 连接到组件 c2 的边 e2。因为边 (e2, c2) 会使值发生变化,所以边 (e1, c1) 将使用 (e2, c2)s 的 (spring) 总和计算。每个边必须具有以下某个值: SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE

参数:
e1 - 该 dependent 的边
c1 - 该 dependent 的组件
s - 连接 dependent 和 anchor 的 spring
e2 - 该 anchor 的边
c2 - 该 anchor 的组件
另请参见:
putConstraint(String, Component, int, String, Component), NORTH, SOUTH, EAST, WEST, VERTICAL_CENTER, HORIZONTAL_CENTER, BASELINE

getConstraints

public SpringLayout.Constraints getConstraints(Component c)
返回指定组件的约束。注意,与 GridBagLayout getConstraints 方法不同,此方法不复制约束。如果没有与此组件相关的约束,则此方法返回一个位置在 0,0 的默认约束对象,此位置相对于父级的 Insets 及其受该组件的最小、最大和首选大小约束的宽度/高度。该大小特征不会在调用此方法时冻结;相反,此方法会返回一个约束对象,其特征会随着该组件特征的更改而进行跟踪。

参数:
c - 将返回其约束的组件
返回:
指定组件的约束

getConstraint

public Spring getConstraint(String edgeName,
                            Component c)
返回控制该组件指定边及其父级的顶边或左边之间距离的 spring。此方法返回一个跟踪该边特征的代理,而不是返回该边当前绑定,即使该边随后反弹也一样。代理特别适用于生成器环境,在此环境中能够使用户以任意顺序定义布局约束。不过,代理确实会提供在布局约束之间创建周期依赖关系的方法。 SpringLayout 将对此类周期进行内部检测,以使布局操作始终终止。

参数:
edgeName - 必须是以下值之一: SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE
c - 需要其边缘 spring 的组件
返回:
一个控制指定边及其父级的顶边或左边之间距离的 spring 代理
另请参见:
NORTH, SOUTH, EAST, WEST, VERTICAL_CENTER, HORIZONTAL_CENTER, BASELINE

layoutContainer

public void layoutContainer(Container parent)
从接口 LayoutManager 复制的描述
布置指定容器。

指定者:
接口 LayoutManager 中的 layoutContainer
参数:
parent - 要布置的容器