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导致了该容器中只有一个组件被显示出来。下一节将向读者详细介绍布局管理器的知识。