11.3 布局管理器 11.3.1 FlowLayout布局管理器
11.3 布局管理器
为了使生成的图形用户界面具有良好的平台无关性,Java语言提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。
例如通过如下语句定义了一个标签(Label):
1 | Label hello = new Label("Hello Java"); |
为了让这个hello标签里刚好可以容纳“Hello Java”字符串,也就是实现该标签的最佳大小(既没有冗余空间,也没有内容被遮挡),Windows可能应该设置为长100像素,高20像素,但换到UNIX上,则可能需要设置为长120像素,高24像素。当一个应用程序从Windows移植到UNIX上时,程序需要做大量的工作来调整图形界面。
对于不同的组件而言,它们都有一个最佳大小,这个最佳大小通常是平台相关的,程序在不同平台上运行时,相同内容的大小可能不一样。如果让程序员手动控制每个组件的大小、位置,这将给编程带来巨大的困难,为了解决这个问题,Java提供了LayoutManager,LayoutManager可以根据运行平台来调整组件的大小,程序员要做的,只是为容器选择合适的布局管理器。
设置布局管理器
所有的AWT容器都有默认的布局管理器,如果没有为容器指定布局管理器,则该容器使用默认的布局管理器。为容器指定布局管理器通过调用容器对象的setlayout方法来完成:
如下代码所示
1 | container.setLayout(new XxxLayout()); |
setLayout方法
| 方法 | 描述 |
|---|---|
void setLayout(LayoutManager mgr) |
Sets the layout manager for this container. |
常用布局管理器
AWT提供了FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout这5个常用的布局管理器,
Swing还提供了一个BoxLayout布局管理器。下面将详细介绍这几个布局管理器
11.3.1 FlowLayout布局管理器
在FlowLayout布局管理器中,组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,重头开始排列。在默认情况下,FlowLayout布局管理器从左向右排列所有组件,遇到边界就会折回下行重新开始
当读者在电脑上输入一篇文章时,所使用的就是FlowLayout布局管理器,所有的文字默认从左向右排列,遇到边界就会折回下一行重新开始。AWT中的FlowLayout布局管理器与此完全类似,只是此时排列的是AWT组件,而不是文字。
构造器
FlowLayout有如下三个构造器
| 方法 | 描述 |
|---|---|
FlowLayout() |
创建对齐方式,垂直间距、水平间距都默认的FlowLayout布局管理器。 |
FlowLayout(int align) |
创建指定的对齐方式,垂直间距、水平间距默认的FlowLayout布局管理器。 |
FlowLayout(int align, int hgap, int vgap) |
创建 指定对齐方式,指定的垂直间距、指定水平间距的FlowLayout布局管理器 |
参数说明
上面三个构造器的
hgap、vgap代表水平间距、垂直间距,为这两个参数传入整数值即可。align表明FlowLayout中组件的排列方向(从左向右、从右向左、从中间向两边等),align参数应该使用FlowLayout类的静态常量FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT。
默认使用FlowLayout布局管理器的组件
Panel和Applet默认使用FlowLayout布局管理器。
程序示例
下面程序将一个Frame改为使用FlowLayout布局管理器。
1 | import java.awt.*; |
运行上面程序,会看到如图11.7所示的窗口效果。

图11.7显示了各组件左对齐、水平间距为20、垂直间距为5的分布效果。
pack方法 自动调整窗口大小
上面程序中执行了f.pack();代码,pack()方法是Window容器提供的一个方法,该方法用于将窗口调整到最佳大小。通过Java编写图形用户界面程序时,很少直接设置窗口的大小,通常都是调用pack()方法来将窗口调整到最佳大小。