如何使用 BorderLayout

Note:

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

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

下图表示使用BorderLayout类的应用程序的快照。

BorderLayoutDemo 的快照

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

该演示的完整代码在BorderLayoutDemo.java文件中。

如上图所示,一个BorderLayout对象具有五个区域。这些区域由BorderLayout常量指定:

  • PAGE_START

  • PAGE_END

  • LINE_START

  • LINE_END

  • CENTER

Version note:

在 JDK 1.4 版之前,各个区域的首选名称有所不同,范围从指南针的点(例如,顶部区域为BorderLayout.NORTH)到示例中使用的常量的更高级版本。我们的示例使用的常量是首选的,因为它们是标准的,并使程序能够适应具有不同方向的语言。

如果将窗口放大,则中心区域将获得尽可能多的可用空间。其他区域仅根据需要扩展以填充所有可用空间。通常,容器仅使用BorderLayout对象的一个或两个区域-仅中心,或中心和底部。

以下代码将组件添加到框架的内容窗格。由于默认情况下内容窗格使用BorderLayout类,因此该代码不需要设置布局 管理 器。完整程序位于BorderLayoutDemo.java文件中。

...//Container pane = aFrame.getContentPane()...
JButton button = new JButton("Button 1 (PAGE_START)");
pane.add(button, BorderLayout.PAGE_START);

//Make the center component big, since that's the
//typical usage of BorderLayout.
button = new JButton("Button 2 (CENTER)");
button.setPreferredSize(new Dimension(200, 100));
pane.add(button, BorderLayout.CENTER);

button = new JButton("Button 3 (LINE_START)");
pane.add(button, BorderLayout.LINE_START);

button = new JButton("Long-Named Button 4 (PAGE_END)");
pane.add(button, BorderLayout.PAGE_END);

button = new JButton("5 (LINE_END)");
pane.add(button, BorderLayout.LINE_END);

将组件的位置(例如BorderLayout.LINE_END)指定为add方法的参数之一。如果BorderLayout对象控制的容器中缺少此组件,请确保指定了该组件的位置,并且没有其他组件放置在同一位置。

所有使用BorderLayout类的教程示例都将组件指定为add方法的第一个参数。例如:

add(component, BorderLayout.CENTER)  //preferred

但是,其他程序中的代码将组件指定为第二个参数。例如,这是编写前面代码的替代方法:

add(BorderLayout.CENTER, component)  //valid but old fashioned
    or
add("Center", component)             //valid but error prone

BorderLayout API

下表列出了用于指定间隙(以像素为单位)的构造函数和方法。

Specifying gaps

构造函数或方法Purpose
BorderLayout(int horizontalGap,int verticalGap)定义边框布局,并在组件之间指定间隙。
setHgap(int)设置组件之间的水平间距。
setVgap(int)设置组件之间的垂直间隙。

使用 BorderLayout 的示例

下表列出了使用BorderLayout类的代码示例,并提供了指向相关部分的链接。

ExampleWhere DescribedNotes
BorderLayoutDemoThis page将组件放置在五个可能的位置中的每个位置。
TabbedPaneDemo如何使用选项卡式窗格将单个组件放在内容窗格中央的许多示例之一,以使组件尽可能大。
CheckBoxDemo如何使用复选框创建一个使用BorderLayout类的JPanel对象。将组件置于左侧(实际上是LINE_START)和中心位置。