布局 管理 的工作方式

Note:

本课涵盖了手工编写布局代码,这可能会很困难。如果您不希望了解布局 管理 的所有详细信息,则可能更喜欢将GroupLayout布局 管理 器与构建器工具结合使用来布局 GUI。 NetBeans IDE是此类构建器工具之一。否则,如果您想手工编码并且不想使用GroupLayout,那么推荐使用GridBagLayout作为下一个最灵活,功能最强大的布局 管理 器。

如果您对使用 JavaFX 创建 GUI 感兴趣,请参阅在 JavaFX 中使用布局

这是使用LayoutManager2的容器布局 管理 序列的示例。

  • 布局 管理 器基本上要做两件事:

  • 计算容器的最小/首选/最大尺寸。

  • 布置容器的孩子。

布局 管理 器基于提供的约束,容器的属性(例如插图)和子级的最小/首选/最大尺寸来执行此操作。如果孩子本身就是一个容器,则使用其自己的布局 管理 器获取其最小/首选/最大尺寸并进行布局。

  • 容器可以是有效的(即isValid()返回 true)或无效。为了使容器有效,容器的所有子代必须已经布置好并且也必须全部有效。 Container.validate方法可用于验证无效的容器。此方法触发组件层次结构中的容器和所有子容器的布局,并将该容器标记为有效。

  • 创建组件后,默认情况下它处于无效状态。 Window.pack方法将验证窗口并首次布置窗口的组件层次结构。

final结果是,要确定容器的最佳尺寸,系统将在容器层次结构的底部确定容器的尺寸。然后,这些大小会渗透到容纳层次结构中,final确定容器的总大小。

如果组件的大小发生了变化(例如,随着字体更改),则必须通过在该组件上调用revalidaterepaint方法来调整该组件的大小并重新绘制。 revalidaterepaint均为thread-safe-您无需从事件分发线程中调用它们。

当您在组件上调用revalidate时,请求将沿包含层次结构传递,直到遇到容器(例如,滚动窗格或顶级容器),而该容器不应受到组件的大小调整的影响。 (这是通过调用容器的isValidateRoot方法来确定的.)然后对容器进行布局,这具有调整重新验证的组件的大小以及所有受影响的组件的大小的作用。