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()
方法来将窗口调整到最佳大小。