创建自定义布局 管理 器

在开始创建自定义布局 管理 器之前,请确保没有现有的布局 管理 器符合您的要求。特别是,诸如GridBagLayoutSpringLayoutBoxLayout之类的布局 管理 器足够灵活,可以在许多情况下使用。您还可以从其他来源(例如从 Internet)中找到布局 管理 器。最后,您可以通过将组件分组到panels之类的容器中来简化布局。

Note:

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

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

若要创建自定义布局 管理 器,必须创建一个实现LayoutManagerinterface的类。您可以直接实现它,也可以实现其子interfaceLayoutManager2

每个布局 管理 器必须至少实现LayoutManagerinterface所需的以下五个方法:

此方法必须考虑由getInsets方法返回的容器的内部边界。如果合适,还应考虑容器的方向(由getComponentOrientation方法返回)。您不能假定在调用layoutContainer之前将调用preferredLayoutSizeminimumLayoutSize方法。

除了实现上述五种方法外,布局 管理 器通常还实现至少一个公共构造函数和toString方法。

如果您希望支持组件约束,最大尺寸或对齐方式,则布局 管理 器应实现LayoutManager2interface。实际上,由于这些原因,几乎所有现代布局 管理 器都需要实现LayoutManager2。该interface为LayoutManager所需的方法添加了五种方法:

在这些方法中,最重要的是addLayoutComponent(Component, Object)invalidateLayout(Container)addLayoutComponent方法用于使用指定的约束对象将组件添加到布局。 invalidateLayout方法用于使布局无效,因此,如果布局 管理 器已缓存信息,则应将其丢弃。有关LayoutManager2的更多信息,请参阅LayoutManager2 API 文档。

最后,无论何时创建自定义布局 管理 器,都应注意保留对不再是Container子级的Component实例的引用。即,布局 管理 器应覆盖removeLayoutComponent,以清除与Component相关的所有缓存状态。

自定义布局的示例

示例CustomLayoutDemo使用了名为DiagonalLayout的自定义布局 管理 器。您可以在DiagonalLayout.java中找到布局 管理 器的源代码。 DialogLayout从左到右对角线排列组件,每行一个组件。这是使用DialogLayout布置五个按钮的 CustomLayoutDemo 图片。

单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行CustomLayoutDemo。另外,要自己编译和运行示例,请查阅example index

首页