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提供了FlowLayoutBorderLayoutGridLayoutGridBagLayoutCardLayout这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布局管理器

参数说明

上面三个构造器的

  • hgapvgap代表水平间距、垂直间距,为这两个参数传入整数值即可。
  • align表明FlowLayout中组件的排列方向(从左向右、从右向左、从中间向两边等),align参数应该使用FlowLayout类的静态常量FlowLayout.LEFTFlowLayout.CENTERFlowLayout.RIGHT

默认使用FlowLayout布局管理器的组件

PanelApplet默认使用FlowLayout布局管理器。

程序示例

下面程序将一个Frame改为使用FlowLayout布局管理器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.awt.*;

public class FlowLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("测试窗口");
// 设置Frame容器使用FlowLayout布局管理器
f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 5));
// 向窗口中添加10个按钮
for (int i = 0; i < 10; i++) {
f.add(new Button("按钮" + i));
}
// 设置窗口为最佳大小
f.pack();
// 将窗口显示出来(Frame对象默认处于隐藏状态)
f.setVisible(true);
}
}

运行上面程序,会看到如图11.7所示的窗口效果。

图片

图11.7显示了各组件左对齐、水平间距为20、垂直间距为5的分布效果。

pack方法 自动调整窗口大小

上面程序中执行了f.pack();代码,pack()方法是Window容器提供的一个方法,该方法用于将窗口调整到最佳大小。通过Java编写图形用户界面程序时,很少直接设置窗口的大小,通常都是调用pack()方法来将窗口调整到最佳大小。