11.2 AWT容器
11.2 AWT容器
容器(Container)是Component的子类,因此容器对象本身也是一个组件,具有组件的所有性质,可以调用Component类的所有方法。
Component类
设置组件大小位置可见性的方法
Component类提供了如下几个常用方法来设置组件的大小、位置和可见性等。
| 方法 | 描述 | 
|---|---|
| void setLocation(int x, int y) | 设置组件的位置 | 
| void setLocation(Point p) | Moves this component to a new location. | 
| void setSize(int width, int height) | 设置组件的大小 | 
| void setSize(Dimension d) | Resizes this component so that it has width d.width and height d.height | 
| void setBounds(int x, int y, int width, int height) | 同时设置组件的位置、大小 | 
| void setBounds(Rectangle r) | Moves and resizes this component to conform to the new bounding rectangle r | 
| void setVisible(boolean b) | 设置该组件的可见性 | 
Container类
访问容器内的组件的方法
容器还可以盛装其他组件,容器类(Container)提供了如下几个常用方法来访问容器里的组件:
| 方法 | 描述 | 
|---|---|
| Component add(Component comp) | Appends the specified component to the end of this container. | 
| Component add(Component comp, int index) | Adds the specified component to this container at the given position. | 
| Component getComponent(int n) | Gets the nth component in this container. | 
| int getComponentCount() | Gets the number of components in this panel. | 
| Component[] getComponents() | Gets all the components in this container. | 
AWT容器分类
AWT主要提供了如下两种主要的容器类型。
- Window:可独立存在的顶级窗口。
- Panel:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中(如- Window、- Panel或者- Applet等)。
AWT容器继承关系
AWT容器的继承关系图,如图11.3所示。

图11.3中显示了AWT容器之间的继承层次,其中Frame和Dialog是AWT编程中常用的组件。
Frame
Frame代表常见的窗口,它是Window类的子类,具有如下几个特点
- Frame对象有标题,允许通过拖拉来改变窗口的位置、大小
- 初始化时为不可见,可用setVisible(true)使其显示出来
- 默认使用BorderLayout作为其布局管理器。
程序示例 创建一个窗口
下面的例子程序通过Frame创建了一个窗口。
| 1 | import java.awt.*; | 
运行上面程序,会看到一个简单的窗口。点击窗口右上角的“×”按钮,该窗口不会关闭,这是因为还未为该窗口编写任何事件响应。如果想关闭该窗口,可以通过关闭运行该程序的命令行窗口来关闭该窗口。
Panel
Panel是AWT中另一个典型的容器,Panel代表不能独立存在、必须放在其他容器中的容器。Panel外在表现为一个矩形区域,该区域内可盛装其他组件。Panel容器存在的意义在于为其他组件提供空间,Panel容器具有如下几个特点
- 可作为容器来盛装其他组件,为放置组件提供空间。
- 不能单独存在,必须放置到其他容器中。
- 默认使用FlowLayout作为其布局管理器。
程序示例 创建Panel
下面的例子程序使用Panel作为容器来盛装一个文本框和一个按钮,并将该Panel对象添加到Frame对象中:
| 1 | import java.awt.*; | 
编译、运行上面程序,会看到如图11.5所示的运行窗口:

从图11.5中可以看出,使用AWT创建窗口很简单,程序只需要通过Frame创建,然后再创建一些AWT组件,把这些组件添加到Frame创建的窗口中即可。
ScrollPane
ScrollPane是一个带滚动条的容器,它也不能独立存在,必须被添加到其他容器中。ScrollPane容器具有如下几个特点。
- 可作为容器来盛装其他组件,当组件占用空间过大时,ScrollPane自动产生滚动条。当然也可以通过指定特定的构造器参数来指定默认具有滚动条。
- 不能单独存在,必须放置到其他容器中。
- 默认使用BorderLayout作为其布局管理器。ScrollPane通常用于盛装其他容器,所以通常不允许改变ScrollPane的布局管理器
程序示例 创建ScrollPane
下面的例子程序使用ScrollPane容器来代替Panel容器。
| 1 | import java.awt.*; | 
运行上面程序,会看到如图11.6所示的窗口:

图11.6所示的窗口中具有水平、垂直滚动条,这符合使用ScrollPane后的效果。程序明明向ScrollPane容器中添加了一个文本框和一个按钮,但只能看到一个按钮,却看不到文本框,这是为什么呢?这是因为ScrollPane使用BorderLayout布局管理器的缘故,而Borderlayout导致了该容器中只有一个组件被显示出来。下一节将向读者详细介绍布局管理器的知识。