第 9 章 GUI(下)9.1 常用 AWT 组件在上一章开始的第一个程序中,我们就用到了按钮(Button),这是最简单的组件之一了,在 AWT 里还有很多用于 GUI 设计的组件,我们现在就来了解更多的 GUI 组件。如图9.1 所示描述了 AWT 中的组件及类层次关系图。图 9.19.1.1 Component 类Java 的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。抽象类 Component 是所有 Java GUI 组件的共同父类。Component 类规定了所有 GUI 组件的基本特性,该类中定义的方法实现了作为一个 GUI 组件所应具备的基本功能。Java 程序要显示的 GUI 组件必须是抽象类 Component 或 MenuComponent 的子类。9.1.2 CanvasCanvas 代表屏幕上的一块空白的矩形区域,程序能够在这个部件表面绘图,也能够捕获用户的操作,产生相应的事件,Canvas 可以说是具有最基本的和最简单的 GUI 功能的部件。当我们要设计一种自己定制的具有 GUI 功能的部件类,我们的这个类就可以继承Canvas,这样,我们的部件类就已经完成了 GUI 的基本功能,我们只需要在这个基础上增加子类部件所专有的外观和功能的相关代码就行了,我们要想绘制子类部件的外观,我们必须覆盖 Canvas 的 paint 方法。我们现在设计一个计时器部件,鼠标在部件上按下时,计时器开始计时,并在部件上显示计时时间,鼠标释放时,计时器停止计时。下面是这个计时器的程序代码,其中涉及到的技巧和知识点,都在前面有过讲解,这里就不作详细解释了。程序清单:TestStopWatch.javaimport java.awt.*;import java.awt.event.*;import java.util.*;import java.text.SimpleDateFormat;class StopWatch extends Canvas implements Runnable{private long startTime = 0;private long endTime = 0;private boolean bStart = false;public StopWatch(){enableEvents(AWTEvent.MOUSE_EVENT_MASK);setSize(80,30);}protected void processMouseEvent(MouseEvent e){if(e.getID() == MouseEvent.MOUSE_PRESSED){bStart = true;startTime = endTime = System.currentTimeMillis();repaint();new Thread(this).start();}else if(e.getID() == MouseEvent.MOUSE_RELEASED){bStart = false;repaint();}super.processMouseEvent(e);}public void paint(Graphics g...