background image

图 8.1

对于众多的 GUI 组件,根据其作用可以又分为两大类:基本组件(下面就全部简称

为组件)和容器。

组件又被称为构件,它是诸如按钮、文本框之类的图形界面元素,在这些组件上不能

容纳其他的组件。容器其实也是一种组件,是一种比较特殊的组件,它可以用来容纳其他
组件,如窗口,对话框等等,所有的容器类都是 java.awt.Container 的直接或间接子类。
 Container 类是 Component 类的一个子类,由此可见容器本身也具有组件的功能和特
点,也可以被当作基本组件一样使用。在上面的程序中,Frame 就是一个容器,它容纳
了一个 Button 部件。

8.2  AWT 线程

细心的读者也许注意到了,在运行上面写的那段程序时,主调用类的 main 方法执

行 f.setVisible(true)语句后就退出了,程序的 main 线程也随之结束了,但程序并没有
结束,窗口不仅正常显示在桌面上,而且我们还可以对这些窗口进行一些常规操作,如
拖动窗口,改变窗口的大小等。我们在多线程的课程中曾经讲过,对 Java 程序来说,只
要还有一个前台线程在运行,整个进程就不会结束。这说明我们的程序还有其它线程在运
行,那么其它线程是谁创建的?又是在什么时候创建的呢?读者可以简单地认为,程序
在产生 Frame 对象时,创建了一个新的线程,我们称之为 AWT 线程。AWT 线程的内部
实现,在不同的 JDK 版本下不太一样,从我们对 Java 的使用经验上来看,在不同的版本
下,我们时常碰到我们的应用程序(不仅仅是 AWT)有不同的执行结果,这是令人很痛
苦和无奈的事情,也是我们使用 Java 所要经常承担的风险。如果我们的程序调用
Frame.dispose 方法关闭了我们的框架窗口(具体实现细节,读者在本章稍后的部分能
够看到),当程序放在 JDK1.3 下运行时,我们发现 AWT 线程没有结束,程序也不会自
动结束。但在 JDK1.4 下运行这个程序,当框架窗口被关闭后,AWT 线程也结束了,程序
随之结束。

245