Module java.desktop
Package javax.swing

Class BoxLayout

java.lang.Object
javax.swing.BoxLayout
所有已实现的接口:
LayoutManager, LayoutManager2, Serializable
直接已知的子类:
DefaultMenuLayout

public class BoxLayout extends Object implements LayoutManager2, Serializable
一个布局管理器,允许多个组件垂直或水平布局。组件不会换行,因此,例如,当调整框架大小时,垂直排列的组件将保持垂直排列。

示例:

以下文本描述此图形。

嵌套多个具有不同水平和垂直组合的面板会产生类似于GridBagLayout的效果,但不会增加复杂性。该图显示水平排列的两个面板,每个面板包含垂直排列的3个组件。

BoxLayout管理器使用一个指定要执行的布局类型的轴参数进行构造。有四种选择:

X_AXIS - 从左到右水平布局组件。
Y_AXIS - 从上到下垂直布局组件。
LINE_AXIS - 根据容器的ComponentOrientation属性,组件的布局方式类似于文本中的单词布局。如果容器的ComponentOrientation是水平的,则组件水平布局,否则垂直布局。对于水平方向,如果容器的ComponentOrientation是从左到右,则组件从左到右布局,否则从右到左布局。对于垂直方向,组件始终从上到下布局。
PAGE_AXIS - 根据容器的ComponentOrientation属性,组件的布局方式类似于页面上文本行的布局。如果容器的ComponentOrientation是水平的,则组件垂直布局,否则水平布局。对于水平方向,如果容器的ComponentOrientation是从左到右,则组件从左到右布局,否则从右到左布局。对于垂直方向,组件始终从上到下布局。

对于所有方向,组件按照它们添加到容器中的顺序排列。

BoxLayout尝试以组件的首选宽度(水平布局)或高度(垂直布局)排列组件。对于水平布局,如果不是所有组件都具有相同的高度,BoxLayout会尝试使所有组件的高度与最高组件一样高。如果对于特定组件无法实现这一点,那么BoxLayout会根据组件的Y对齐方式垂直对齐该组件。默认情况下,组件的Y对齐方式为0.5,这意味着组件的垂直中心应该与其他具有0.5 Y对齐方式的组件的垂直中心具有相同的Y坐标。

类似地,对于垂直布局,BoxLayout尝试使列中的所有组件与最宽的组件一样宽。如果失败,它会根据它们的X对齐方式水平对齐它们。对于PAGE_AXIS布局,水平对齐是基于组件的前沿边缘完成的。换句话说,X对齐值为0.0表示组件的左边缘(如果容器的ComponentOrientation是从左到右)或者表示组件的右边缘(否则)。

许多程序不直接使用BoxLayout,而是使用Box类。Box类是一个使用BoxLayout的轻量级容器。它还提供了方便的方法来帮助您很好地使用BoxLayout。向多个嵌套框添加组件是获得所需布局的强大方法。

有关更多信息和示例,请参阅如何使用BoxLayout,这是The Java Tutorial中的一节。

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

自:
1.2
参见:
  • Field Details

    • X_AXIS

      public static final int X_AXIS
      指定组件应从左到右布局。
      参见:
    • Y_AXIS

      public static final int Y_AXIS
      指定组件应从上到下布局。
      参见:
    • LINE_AXIS

      public static final int LINE_AXIS
      指定组件应按照目标容器的ComponentOrientation属性确定的文本行方向进行布局。
      参见:
    • PAGE_AXIS

      public static final int PAGE_AXIS
      指定组件应按照目标容器的ComponentOrientation属性确定的页面上文本流动方向进行布局。
      参见:
  • Constructor Details

    • BoxLayout

      @ConstructorProperties({"target","axis"}) public BoxLayout(Container target, int axis)
      创建一个布局管理器,将沿着给定轴布局组件。
      参数:
      target - 需要布局的容器
      axis - 沿其布局组件的轴。可以是BoxLayout.X_AXIS, BoxLayout.Y_AXIS, BoxLayout.LINE_AXISBoxLayout.PAGE_AXIS之一
      抛出:
      AWTError - 如果axis的值无效
  • Method Details

    • getTarget

      public final Container getTarget()
      返回使用此布局管理器的容器。
      返回:
      使用此布局管理器的容器
      自:
      1.6
    • getAxis

      public final int getAxis()
      返回用于布局组件的轴。返回以下之一:BoxLayout.X_AXIS, BoxLayout.Y_AXIS, BoxLayout.LINE_AXISBoxLayout.PAGE_AXIS
      返回:
      用于布局组件的轴
      自:
      1.6
    • invalidateLayout

      public void invalidateLayout(Container target)
      表示子项已更改其与布局相关的信息,因此应刷新任何缓存的计算。

      当容器上调用invalidate方法时,AWT会调用此方法。由于invalidate方法可能异步调用到事件线程之外,因此此方法可能会异步调用。

      指定者:
      invalidateLayout 在接口 LayoutManager2
      参数:
      target - 受影响的容器
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
    • addLayoutComponent

      public void addLayoutComponent(String name, Component comp)
      该类不使用。
      指定者:
      addLayoutComponent 在接口 LayoutManager
      参数:
      name - 组件的名称
      comp - 组件
    • removeLayoutComponent

      public void removeLayoutComponent(Component comp)
      该类不使用。
      指定者:
      removeLayoutComponent 在接口 LayoutManager
      参数:
      comp - 组件
    • addLayoutComponent

      public void addLayoutComponent(Component comp, Object constraints)
      该类不使用。
      指定者:
      addLayoutComponent 在接口 LayoutManager2
      参数:
      comp - 组件
      constraints - 约束条件
    • preferredLayoutSize

      public Dimension preferredLayoutSize(Container target)
      返回指定目标容器中组件的首选尺寸。
      指定者:
      preferredLayoutSize 在接口 LayoutManager
      参数:
      target - 需要进行布局的容器
      返回:
      尺寸 >= 0 && <= Integer.MAX_VALUE
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
      参见:
    • minimumLayoutSize

      public Dimension minimumLayoutSize(Container target)
      返回指定目标容器中包含的组件进行布局所需的最小尺寸。
      指定者:
      minimumLayoutSize 在接口 LayoutManager
      参数:
      target - 需要进行布局的容器
      返回:
      尺寸 >= 0 && <= Integer.MAX_VALUE
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
      参见:
    • maximumLayoutSize

      public Dimension maximumLayoutSize(Container target)
      返回目标容器可以使用的最大尺寸,以便对其包含的组件进行布局。
      指定者:
      maximumLayoutSize 在接口 LayoutManager2
      参数:
      target - 需要进行布局的容器
      返回:
      尺寸 >= 0 && <= Integer.MAX_VALUE
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
      参见:
    • getLayoutAlignmentX

      public float getLayoutAlignmentX(Container target)
      返回容器沿X轴的对齐方式。如果箱式布局是水平的,则返回默认对齐方式。否则,将返回沿Y轴放置子组件所需的对齐方式。
      指定者:
      getLayoutAlignmentX 在接口 LayoutManager2
      参数:
      target - 容器
      返回:
      对齐方式 >= 0.0f && <= 1.0f
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
    • getLayoutAlignmentY

      public float getLayoutAlignmentY(Container target)
      返回容器沿Y轴的对齐方式。如果箱式布局是垂直的,则返回默认对齐方式。否则,将返回沿X轴放置子组件所需的对齐方式。
      指定者:
      getLayoutAlignmentY 在接口 LayoutManager2
      参数:
      target - 容器
      返回:
      对齐方式 >= 0.0f && <= 1.0f
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器
    • layoutContainer

      public void layoutContainer(Container target)
      当指定的容器需要进行布局时,由AWT调用。
      指定者:
      layoutContainer 在接口 LayoutManager
      参数:
      target - 要进行布局的容器
      抛出:
      AWTError - 如果目标不是传递给BoxLayout构造函数的容器