java.lang.Object javax.swing.SpringLayout
public class SpringLayout
SpringLayout
根据一组约束布置其相关容器的子组件。有关使用 SpringLayout
的示例,请参阅 The Java Tutorial 中的 How to Use SpringLayout 一节。
每个由 Spring
对象表示的约束控制着两个组件边之间的垂直距离或水平距离。这两个边属于容器的任一子级,或属于该容器本身。例如,可以使用控制某组件东(右)和西(左)边之间距离的约束表示该组件允许的宽度。某个组件所允许的 y 坐标可以通过约束该组件北(上)边和其容器的北边之间的距离表示。
SpringLayout
控制的容器的每个子级及其容器本身都有一组与其相关的约束。这些约束由一个 SpringLayout.Constraints
对象表示。默认情况下,SpringLayout
创建使其相关组件具有最小、首选和最大大小的约束,这几项大小都由该组件的 Component.getMinimumSize()
、Component.getPreferredSize()
和 Component.getMaximumSize()
方法返回。x 和 y 的位置最初不受约束,以便在约束它们之前将该 Component
定位在对应于父 Container
的 Insets
的(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
的 GUI,则要记住通过约束东/西和南/北的位置初始化组件的位置。可能还需要明确设置容器的大小,具体取决于您使用的约束。
尽管 SpringLayout
简单易用,但它还要仿效其他多数布局管理器的行为。对于某些功能(如 FlowLayout
提供的行断开),需要创建一个 Spring
类的专用子类。
SpringLayout
还提供解决许多困难布局问题的方法,这些问题都不能通过嵌套 Box
的组合来解决。也就是说,SpringLayout
完全遵守 LayoutManager2
协定,因此可以使用其他布局管理器进行嵌套(一种创建其他布局管理器使用的约束的更好技术)。
SpringLayout
布局操作的渐进复杂性与约束(和/或组件)的数量呈线关系。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
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) 如果 constraints 是 SpringLayout.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 |
字段详细信息 |
---|
public static final String NORTH
public static final String SOUTH
public static final String EAST
public static final String WEST
public static final String HORIZONTAL_CENTER
public static final String VERTICAL_CENTER
public static final String BASELINE
public static final String WIDTH
public static final String HEIGHT
构造方法详细信息 |
---|
public SpringLayout()
SpringLayout
。
方法详细信息 |
---|
public void addLayoutComponent(String name, Component c)
LayoutManager
中的
addLayoutComponent
name
- 要与组件关联的字符串
c
- 要添加的组件
public void removeLayoutComponent(Component c)
LayoutManager
中的
removeLayoutComponent
c
- 将从容器中移除的组件
public Dimension minimumLayoutSize(Container parent)
LayoutManager
复制的描述
LayoutManager
中的
minimumLayoutSize
parent
- 要布置的组件
public Dimension preferredLayoutSize(Container parent)
LayoutManager
复制的描述
LayoutManager
中的
preferredLayoutSize
parent
- 要布置的容器
LayoutManager.minimumLayoutSize(java.awt.Container)
public Dimension maximumLayoutSize(Container parent)
LayoutManager2
复制的描述
LayoutManager2
中的
maximumLayoutSize
public void addLayoutComponent(Component component, Object constraints)
constraints
是
SpringLayout.Constraints
的一个实例,则将该约束与指定组件相关联。
LayoutManager2
中的
addLayoutComponent
component
- 正添加的组件
constraints
- 该组件的约束
SpringLayout.Constraints
public float getLayoutAlignmentX(Container p)
LayoutManager2
中的
getLayoutAlignmentX
public float getLayoutAlignmentY(Container p)
LayoutManager2
中的
getLayoutAlignmentY
public void invalidateLayout(Container p)
LayoutManager2
复制的描述
LayoutManager2
中的
invalidateLayout
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)
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.NORTH
、
SpringLayout.SOUTH
、
SpringLayout.EAST
、
SpringLayout.WEST
、
SpringLayout.VERTICAL_CENTER
、
SpringLayout.HORIZONTAL_CENTER
或
SpringLayout.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
public SpringLayout.Constraints getConstraints(Component c)
GridBagLayout
getConstraints
方法不同,此方法不复制约束。如果没有与此组件相关的约束,则此方法返回一个位置在 0,0 的默认约束对象,此位置相对于父级的 Insets 及其受该组件的最小、最大和首选大小约束的宽度/高度。该大小特征不会在调用此方法时冻结;相反,此方法会返回一个约束对象,其特征会随着该组件特征的更改而进行跟踪。
c
- 将返回其约束的组件
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
- 需要其边缘 spring 的组件
NORTH
,
SOUTH
,
EAST
,
WEST
,
VERTICAL_CENTER
,
HORIZONTAL_CENTER
,
BASELINE
public void layoutContainer(Container parent)
LayoutManager
复制的描述
LayoutManager
中的
layoutContainer
parent
- 要布置的容器