《JavaTM程序设计语 言基础》第 1 部分
第 3 课:创建 Applet 程序

[<<返回] [目录] [下一个>>]

象应用程序一样,applet 程序也是由类创建的。不过,applet 程序并没有作 为输入点的 main 方法,而是采用多个方法来控制 applet 程序执 行的各个方面。

本课把第 2 课中的应用程序转换成 applet 程序并阐述 applet 程序的结构 和组成部分。


应用程序转换为 Applet 程序

以下程序为与第 2 课中的 LessonTwoB 应用程序等效的 applet 程序。下图显示了这个 applet 程序运行时的外观。该 applet 程序的结构和组成 部分将在下面讨论了 applet 程序如何运行之后予以讨论。

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class SimpleApplet extends Applet{

  String text = "I'm a simple applet";

  public void init() {
        text = "I'm a simple applet";
        setBackground(Color.cyan);
  }
  public void start() {
        System.out.println("starting...");
  }
  public void stop() {
        System.out.println("stopping...");
  }
  public void destroy() {
        System.out.println("preparing to unload...");
  }
  public void paint(Graphics g){
        System.out.println("Paint");
        g.setColor(Color.blue);
        g.drawRect(0, 0,
                   getSize().width -1,
                   getSize().height -1);
        g.setColor(Color.red);
        g.drawString(text, 15, 25);
  }
}

SimpleApplet 类被声明为 public,这样运行该 applet 程序的非本地程序(浏览器程序或 appletviewer)就可以 访问它。

运行 Applet 程序

若要观察到该 applet 程序的运行效果,就需要一个带有 Applet 标签的 HTML 文件,如下所示:

<HTML>
<BODY>
<APPLET CODE=SimpleApplet.class WIDTH=200 HEIGHT=100>
</APPLET>
</BODY>
</HTML>

运行 applet 程序最简便的方法是采用以下所示的 appletviewer,其中 simpleApplet.html 是一个包含上述 HTML 代码的文件:

   appletviewer simpleApplet.html

注意:若要在浏览器中运行采用 JavaTM 2 API 编写的 applet 程序,浏览器就必须支持 Java 2 平台。如果浏览器不支 持 Java 2 平台,您就必须用 appletviewer 运行 applet 程序或者必须安装 Java Plug-in。 Java Plug-in (Java 插件)使您能够在网页上用 1.2 版本的 Java VM 代替 Web 浏览器的缺省 Java VM 运行 applet 程序。

Applet 的结构和组成部分

Java API 的 Applet 类为您提供设计 applet 程序外观并管理 其动作时所需要的支持。该类提供一种叫做 Panel(面板)的图形 用户界面(GUI)组件以及大量方法。要创建一个 applet 程序,就需要扩展该 Applet 类(或创建子类)并实现您所需要的外观和动作。

applet 程序的外观通过在 Panel 上绘制生成,或者通过向 Panel 附加诸如按钮、滚动条或文本区等其它 GUI 组件来实现。 applet 程序的动作是通过执行程序来定义的。

类的扩展

多数具有任意复杂性的类都扩展了其它的类。扩展另一个类的含义就是编写可使 用被扩展类中定义的域和方法的新类。被扩展类为父类,扩展后得到的类为子类。 这一过程还可以解释为子类继承了其单个或一个父类链的域和方法。子类或者调用 或者重载被继承的方法。这被称为单继承。

SimpleApplet 类扩展了 Applet 类,Applet 类扩展 Panel 类,Panel 类扩展了 Container 类。Container 类扩展了 Object类,而 Object 类是所有 Java API 类的父类。

Applet 类提供您在示例 applet 程序看到的 initstartstopdestroypaint 方法。SimpleApplet 类则重载这些方法而执行 SimpleApplet 类需要他们执行的操作。Applet 类不提供针对这些方法的功能。

不过,Applet 类提供针对 setBackground 方法 的功能,该方法在 init 方法中被调用。对 setBackground 的调用是调用从父类继承来的方法的示例,而不是重载从父类继承来的方法的示 例。

也许,您想知道为什么 Java 语言提供的是方法而不是具体的实现。这是为了 提供让每个程序设计人员使用并能保持 Java API 上一致性的约定。例如,如果 每个编程人员编写了他们自己用于开始运行 applet 程序的方法,而采用了不同 的名称(如:begingo),那么这个 applet 程 序对其它程序和浏览器而言就不具备可互操作性,或者对多平台环境而言不具备 可移植性。例如,Netscape 和 Internet Explorer 都知道如何查找 initstart 方法。

动作

applet 程序是受运行它的软件控制的。通常,这个控制软件是一个浏览器,不 过也可以是您在示例程序中所看到的 appletviewer。这个控制程序 通过调用 applet 从 Applet 所继承的方法来控制该applet的。

init 方法:init方法在控制 软件首次创建和加载 applet 时被调用。本方法仅执行一次 applet 程序运行所 需要的操作,如:创建用户界面或设置字体。本例中,init方法的 功能是初始化文本串并设置背景颜色。

start 方法:start方法在 applet 被访问时被调用,如在终端用户登录到带有 applet 程序的网页时。所举 示例的功能是向控制台打印关于 applet 正在启动的通知文本。在更复杂的 applet 程序中,start 方法执行 applet 程序开始时要求完成的 操作,如:开始播放动画或播放声音。

start 方法执行后,事件线程(event thread)调用 paint 方法来向 applet 的 Panel 上绘图。一个线程(thread)是 applet 程序中的单个顺序控制流,每个 applet 程序都可以运行多个线程。 Applet 绘图方法始终从专门的绘图和事件处理线程中被调用。

stop 和 destroy 方法:stop 方法用于在 applet 程序不再需要出现在屏幕上时停止该 applet 程序,如在终 端用户离开该网页时。示例程序向控制台打印输出一条告知您该 applet 程序将 要停止的信息串。在更复杂的 applet 程序中,本方法应完成停止动画或声音播 放之类的动作。

destroy方法在浏览器退出时被调用。您的 applet 程序应执行 这一方法来完成最后的清除工作,如停止活动线程。

外观

Applet 类中提供的 Panel 从其父类 Container 继承 paint 方法。若要在 Applet 的 Panel 上绘图,就要执行 paint 方法。

传递给 paint 方法的 Graphics 对象定义绘制到 Panel 上的 graphics context(图形上下文 )。 Graphics 对象有执行图形操作的方法,如:设置绘图颜色、绘制 图形、图象和文本。

适用于 SimpleAppletpaint 方法在兰色方 框中以红色绘制 I'm a simple applet 文本串。

   public void paint(Graphics g){
        System.out.println("Paint");
//Set drawing color to blue
        g.setColor(Color.blue);
//Specify the x, y, width and height for a rectangle
        g.drawRect(0, 0,
                   getSize().width -1,
                   getSize().height -1);
//Set drawing color to red
        g.setColor(Color.red);
//Draw the text string at the (15, 25) x-y location
        g.drawString(text, 15, 25);
   }

程序包

applet 程序在顶部包含了三个 import 语句。任意大小的应用 程序和全部 applet 程序都使用 import 语句来访问程序包中现成 的 Java API 类。无论 Java 是从平台下载的 Java API 类还是来自第三方的或 由您自己编写并保存在与程序无关的某个目录下,情况都是如此。在编译时,程 序用 import 语句定位和引用存在于本地或网络系统中任何地方的 已编译的 Java API 类。一个程序包中的已编译类可以与另一个程序包中的已编 译类同名。程序包的名称可区分这两个类。

第 1 和 2 课中的示例调用 System.out.println Java API 类 时并不需要程序包声明,这是因为 System 类处于已经默认包含的 java.lang 程序包中。任何时候使用该程序包中的已编译类都不 需要采用 import java.lang.* 语句。

更多信息

有关 applet 程序的更多信息,可参与 The Java Tutorial 中的 编写 Applet 程序 部分。

[TOP]

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null