文档

Java™ 教程
隐藏目录
布局管理器的工作原理
路径:使用Swing创建GUI
课程:在容器内布局组件

布局管理工作原理


注意: 本课程涵盖手动编写布局代码,这可能是有挑战性的。如果您对学习布局管理的所有细节不感兴趣,您可以选择使用GroupLayout布局管理器结合构建工具来布局您的GUI。其中一种构建工具是NetBeans IDE。否则,如果您想手动编码并且不想使用GroupLayout,那么建议您使用GridBagLayout作为下一个最灵活和强大的布局管理器。

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

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

  1. 布局管理器基本上做两件事:
    • 计算容器的最小/首选/最大尺寸。
    • 布置容器的子组件。

    布局管理器基于提供的约束、容器的属性(如插入)以及子组件的最小/首选/最大尺寸来完成这些操作。如果子组件本身是一个容器,则使用其自身的布局管理器来获取其最小/首选/最大尺寸并进行布局。

  2. 容器可以是有效的(即isValid()返回true)或无效的。对于容器有效,所有容器的子组件必须已经布局并且都有效。可以使用Container.validate方法来验证一个无效的容器。此方法触发容器及其所有子容器的布局,并将此容器标记为有效。

  3. 组件创建后,默认处于无效状态。窗口的Window.pack方法会验证窗口并首次布局窗口的组件层次结构。

最终结果是,为了确定容器的最佳尺寸,系统会确定容器层次结构底部的容器的尺寸。这些尺寸会向上层容器传递,最终确定容器的总尺寸。

如果组件的尺寸发生变化,例如更改字体后,必须通过调用该组件的revalidaterepaint方法对其进行调整大小和重绘。两者revalidaterepaint都是线程安全的 - 您不需要从事件调度线程调用它们。

当在组件上调用revalidate时,请求将沿着容器层次结构向上传递,直到遇到不应受到组件调整大小影响的容器,例如滚动窗格或顶级容器。然后对容器进行布局,这将调整重新验证的组件的大小和所有受影响组件的大小。


上一页: 使用布局管理器
下一页: 如何使用不同的布局管理器