模块 java.desktop

类 SpringLayout

java.lang.Object
javax.swing.SpringLayout
所有已实现的接口:
LayoutManager , LayoutManager2

public class SpringLayout extends Object implements LayoutManager2
SpringLayout 根据一组约束布置其关联容器的子级。有关使用 SpringLayout 的示例,请参阅 The Java Tutorial 中的 如何使用SpringLayout

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

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

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

表示每个约束的 Spring 对象具有最小值、首选值、最大值和当前值。根据 Spring.sum(javax.swing.Spring, javax.swing.Spring) 方法描述中给出的公式,弹簧的当前值介于最小值和最大值之间。当最小值、首选值和最大值相同时,当前值始终等于它们;这个不灵活的弹簧叫做strut。您可以使用工厂方法 Spring.constant(int) 创建 struts。 Spring 类还提供了用于创建其他类型弹簧的工厂方法,包括依赖于其他弹簧的弹簧。

SpringLayout 中,每条边的位置仅取决于另一条边的位置。如果随后添加约束以创建边的新绑定,则先前的绑定将被丢弃并且该边仍然依赖于单个边。弹簧应该只连接在容器的边缘和它的直接孩子之间; SpringLayout 的行为在连接不同容器(内部或外部)组件边缘的约束条件下未定义。

SpringLayout 与其他布局管理器


Note: 与许多布局管理器不同,SpringLayout 不会自动设置其管理的组件的位置。如果您手动编写使用 SpringLayout 的 GUI,请记住通过限制西/东和北/南位置来初始化组件位置。

根据您使用的约束,您可能还需要明确设置容器的大小。


尽管 SpringLayout 很简单,但它可以模拟大多数其他布局管理器的行为。对于某些功能,例如 FlowLayout 提供的换行符,您需要创建 Spring 类的专用子类。

SpringLayout 还提供了一种方法来解决许多难以通过 Box es 的嵌套组合解决的布局问题。也就是说,SpringLayout 正确遵守 LayoutManager2 契约,因此可以与其他布局管理器嵌套——一种比创建其他布局管理器隐含的约束更可取的技术。

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

Warning: 此类的序列化对象将与未来的 Swing 版本不兼容。当前的序列化支持适用于运行相同版本 Swing 的应用程序之间的短期存储或 RMI。从 1.4 开始,对所有 JavaBeans 的长期存储的支持已添加到 java.beans 包中。请参阅 XMLEncoder

自从:
1.4
参见:
  • 字段详细信息

    • 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)
      没有效果,因为这个布局管理器不使用每个组件的字符串。
      指定者:
      addLayoutComponent 在接口 LayoutManager
      参数:
      name - 要与组件关联的字符串
      c - 要添加的组件
    • removeLayoutComponent

      public void removeLayoutComponent(Component  c)
      删除与指定组件关联的约束。
      指定者:
      removeLayoutComponent 在接口 LayoutManager
      参数:
      c - 从容器中移除的组件
    • minimumLayoutSize

      public Dimension  minimumLayoutSize(Container  parent)
      从接口 LayoutManager 复制的描述
      给定容器包含的组件,计算指定容器的最小尺寸。
      指定者:
      minimumLayoutSize 在接口 LayoutManager
      参数:
      parent - 要布局的组件
      返回:
      容器的最小尺寸
      参见:
    • preferredLayoutSize

      public Dimension  preferredLayoutSize(Container  parent)
      从接口 LayoutManager 复制的描述
      给定容器包含的组件,计算指定容器的首选尺寸。
      指定者:
      preferredLayoutSize 在接口 LayoutManager
      参数:
      parent - 要布置的容器
      返回:
      容器的首选尺寸
      参见:
    • maximumLayoutSize

      public Dimension  maximumLayoutSize(Container  parent)
      从接口 LayoutManager2 复制的描述
      给定容器包含的组件,计算指定容器的最大尺寸。
      指定者:
      maximumLayoutSize 在接口 LayoutManager2
      参数:
      parent - 目标容器
      返回:
      容器的最大尺寸
      参见:
    • addLayoutComponent

      public void addLayoutComponent(Component  component, Object  constraints)
      如果 constraintsSpringLayout.Constraints 的实例,则将约束与指定组件相关联。
      指定者:
      addLayoutComponent 在接口 LayoutManager2
      参数:
      component - 正在添加的组件
      constraints - 组件的约束
      参见:
    • getLayoutAlignmentX

      public float getLayoutAlignmentX(Container  p)
      返回 0.5f(居中)。
      指定者:
      getLayoutAlignmentX 在接口 LayoutManager2
      参数:
      p - 目标容器
      返回:
      x 轴对齐首选项
    • getLayoutAlignmentY

      public float getLayoutAlignmentY(Container  p)
      返回 0.5f(居中)。
      指定者:
      getLayoutAlignmentY 在接口 LayoutManager2
      参数:
      p - 目标容器
      返回:
      y 轴对齐首选项
    • invalidateLayout

      public void invalidateLayout(Container  p)
      从接口 LayoutManager2 复制的描述
      使布局无效,表示如果布局管理器缓存了信息,则应将其丢弃。
      指定者:
      invalidateLayout 在接口 LayoutManager2
      参数:
      p - 目标容器
    • 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 - 依赖的边缘
      c1 - 依赖的组件
      pad - 依赖和锚点之间的固定距离
      e2 - 锚的边缘
      c2 - 锚的组成部分
      参见:
    • putConstraint

      public void putConstraint(String  e1, Component  c1, Spring  s, String  e2, Component  c2)
      将组件 c1 的边 e1 链接到组件 c2 的边 e2。随着 edge (e2, c2) 值的改变,edge (e1, c1) 将通过 (e2, c2)s 的(弹簧)总和来计算。每条边必须具有以下值之一:SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE
      参数:
      e1 - 依赖的边缘
      c1 - 依赖的组件
      s - 连接依赖和锚点的弹簧
      e2 - 锚的边缘
      c2 - 锚的组成部分
      参见:
    • getConstraints

      public SpringLayout.Constraints  getConstraints(Component  c)
      返回指定组件的约束。请注意,与 GridBagLayout getConstraints 方法不同,此方法不会克隆约束。如果没有约束与此组件相关联,则此方法返回一个默认约束对象,该对象位于相对于父级 Insets 的 0,0 处,并且其宽度/高度被限制为组件的最小、最大和首选大小。调用此方法时尺寸特征未冻结;相反,此方法返回一个约束对象,其特征在组件变化时跟踪组件的特征。
      参数:
      c - 将返回其约束的组件
      返回:
      指定组件的约束
    • getConstraint

      public Spring  getConstraint(String  edgeName, Component  c)
      返回控制组件指定边缘与其父级上边缘或左边缘之间距离的弹簧。此方法不是返回边缘的当前绑定,而是返回一个跟踪边缘特征的代理,即使边缘随后被反弹也是如此。代理旨在用于允许用户以任何顺序定义布局约束的构建器环境。然而,代理确实提供了在布局约束之间创建循环依赖关系的方法。 SpringLayout 在内部检测到此类循环,以便布局操作始终终止。
      参数:
      edgeName - 必须是 SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE 之一
      c - 需要边缘弹簧的组件
      返回:
      弹簧的代理,控制指定边与其父级的上边缘或左边缘之间的距离
      参见:
    • layoutContainer

      public void layoutContainer(Container  parent)
      从接口 LayoutManager 复制的描述
      布置指定的容器。
      指定者:
      layoutContainer 在接口 LayoutManager
      参数:
      parent - 要布置的容器