public class SpringLayout extends Object implements LayoutManager2
SpringLayout
根据一组约束来布置其关联容器的子项。
见How to Use SpringLayout在Java教程使用的例子SpringLayout
。
由Spring
对象表示的每个约束控制两个组件边缘之间的垂直或水平距离。 边缘可以属于容器的任何孩子,也可以属于容器本身。 例如,可以使用控制组件的西(左)和东(右)边之间的距离的约束来表示组件的允许宽度。 组件的允许的y坐标可以通过限制组件的北(顶部)边缘与其容器的北边缘之间的距离来表示。
SpringLayout
控制的容器的所有子项以及容器本身都具有与之相关联的一组约束。 这些约束由SpringLayout.Constraints
对象表示。 默认情况下, SpringLayout
产生约束,使他们的相关组件具有最小,首选,和组件的最大返回大小Component.getMinimumSize()
, Component.getPreferredSize()
和Component.getMaximumSize()
种方法。 x和y的位置最初不受约束,以便约束它们之前的Component
将定位在0,0相对于Insets
父Container
。
您可以通过多种方式更改组件的约束。 您可以使用putConstraint
中的一种方法来建立一个连接同一容器中两个组件边缘的弹簧。 或者您可以使用getConstraints
获取适当的SpringLayout.Constraints
对象,然后修改其一个或多个弹簧。 或者您可以使用getConstraint
获取组件特定边缘的弹簧,并进行修改。 您还可以通过在将组件添加到其容器中(使用Container.add(Component, Object)
) SpringLayout.Constraints
对象,将自己的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的SpringLayout
,它可以模拟大多数其他布局管理器的行为。 对于某些功能,例如由FlowLayout
提供的FlowLayout
,您需要创建Spring
类的专用子类。
SpringLayout
还提供了一种解决许多困难的布局问题的方法,这些问题无法通过嵌套Box
es的Box
来解决。 也就是说, SpringLayout
尊重LayoutManager2
合同,因此可以嵌套其他布局管理器 - 这种技术可以优于创建其他布局管理器所暗示的约束。
SpringLayout的布局操作的SpringLayout
度在约束(和/或组件)的数量上是线性的。
警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已经添加到java.beans
包中。 请参阅XMLEncoder
。
Spring
, SpringLayout.Constraints
Modifier and Type | Class and Description |
---|---|
static class |
SpringLayout.Constraints
Constraints 对象保留了由SpringLayout控制的容器控制组件大小和位置更改方式的
SpringLayout 。
|
Modifier and Type | Field and Description |
---|---|
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 and Description |
---|
SpringLayout()
构造新的
SpringLayout 。
|
Modifier and Type | Method and Description |
---|---|
void |
addLayoutComponent(Component component, Object 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的
c1 到
e2 的e2的
c2 。
|
void |
removeLayoutComponent(Component c)
删除与指定组件关联的约束。
|
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 void addLayoutComponent(String name, Component c)
addLayoutComponent
在接口
LayoutManager
name
- 要与组件关联的字符串
c
- 要添加的组件
public void removeLayoutComponent(Component c)
removeLayoutComponent
在接口
LayoutManager
c
- 组件从容器中移除
public Dimension minimumLayoutSize(Container parent)
LayoutManager
minimumLayoutSize
在接口
LayoutManager
parent
- 要布局的组件
LayoutManager.preferredLayoutSize(java.awt.Container)
public Dimension preferredLayoutSize(Container parent)
LayoutManager
preferredLayoutSize
在接口
LayoutManager
parent
- 要布置的容器
LayoutManager.minimumLayoutSize(java.awt.Container)
public Dimension maximumLayoutSize(Container parent)
LayoutManager2
复制
maximumLayoutSize
在接口
LayoutManager2
Component.getMaximumSize()
, LayoutManager
public void addLayoutComponent(Component component, Object constraints)
constraints
是实例
SpringLayout.Constraints
,关联到指定组件的约束。
addLayoutComponent
在接口
LayoutManager2
component
- 要添加的组件
constraints
- 组件的约束
SpringLayout.Constraints
public float getLayoutAlignmentX(Container p)
getLayoutAlignmentX
在接口
LayoutManager2
public float getLayoutAlignmentY(Container p)
getLayoutAlignmentY
在接口
LayoutManager2
public void invalidateLayout(Container p)
LayoutManager2
invalidateLayout
在接口
LayoutManager2
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
-
e1
的边缘
c1
- 依赖的组件
pad
- 从属和锚之间的固定距离
e2
- 锚的边缘
c2
- 锚的组成部分
putConstraint(String, Component, Spring, String, Component)
public void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
e1
的e1 c1
到e2
的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
-
e1
的边缘
c1
- 依赖组件
s
- 弹簧链接依赖和锚
e2
- 锚的边缘
c2
- 锚的组成部分
putConstraint(String, Component, int, String, Component)
,
NORTH
,
SOUTH
,
EAST
,
WEST
,
VERTICAL_CENTER
,
HORIZONTAL_CENTER
,
BASELINE
public SpringLayout.Constraints getConstraints(Component c)
GridBagLayout
getConstraints
方法不同,此方法不克隆约束。
如果没有与此组件相关联的约束,此方法将返回一个默认约束对象,该对象位于相对于父组件Insets的0,0,其宽度/高度被限制为组件的最小,最大和首选大小。
在调用该方法时,大小特征不会被冻结;
相反,该方法返回一个约束对象,其特征跟踪组件的特征,因为它们发生变化。
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
- 需要边缘弹簧的部件
NORTH
,
SOUTH
,
EAST
,
WEST
,
VERTICAL_CENTER
,
HORIZONTAL_CENTER
,
BASELINE
public void layoutContainer(Container parent)
LayoutManager
layoutContainer
在界面
LayoutManager
parent
- 要布置的容器