当前位置:课程学习>>第九章 Applet程序设计>>文本学习>>知识点一
一、概述
applet被称为Java小程序,是由“application”和“let”(小)两个单词合并而来的。applet可以应用在Web页面上,为静态的HTML网页带来了动态交互和生动显示等。正是由于applet的存在,Java语言和程序才得以借助互联网而快速发展,才能具有如此强烈的吸引力和感染力,应用得如此广泛。
applet是嵌入在Web页面上并通过Web调用来执行的,通过applet来实现用户与Web页面之间的交互。在applet中,可以集成图形、文字和声音等各类组件,和application相关的知识大多可以用在applet的编写中,同时applet也具有与application不同的特殊生命周期和使用方式。
applet是被设计用来在网页上运行的简单Java程序,但是在不访问网页和网络的情况下,也可以单独运行一个applet程序。
每个applet程序需要实现一个javax.swing.JApplet的派生类,所以在编写applet程序时,需要使用导入语句:
import javax.swing.*;
applet程序一般还需要awt类库的支持。这样,完整的导入语句可能为:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
java.applet.Applet是早期的applet程序所使用的基类,它不能与swing组件协调工作,JApplet类是Applet类的派生类,它继承了Applet类的所有方法,且能够支持swing组件。
二、Applet方法
与Java application不同,applet没有main方法作为程序的入口,当它显示在浏览器的Web页面时,在applet中定义的初始化、开始、停止和销毁等方法就会被调用。其中方法init、start、stop和destroy用以控制applet程序的生命周期。
表 9.1 java.applet.Applet类的生命周期方法
方法名 |
描述 |
void init() |
在下载applet后,在第一次调用start方法前,浏览器会调用init方法。通常在该方法中将所使用的对象进行初始化。 |
void start() |
浏览器会调用start方法通知applet正在处理。在调用start方法和init方法之间,可能会存在一段时间间隔。在start方法中实现applet所做的工作。 |
void stop() |
调用stop方法通知applet已经停止处理,是在applet不在可视范围内或是destroy方法调用前被调用。例如,当用户滚动网页时,applet可能会出现在可视范围之外,此时应该停止applet中的执行动作,以免造成资源的浪费。 |
void destroy() |
在applet销毁前,可以在此处释放掉所占用的资源。 |
以上四个方法构成了Applet程序的生命周期,可以通过它们来控制Applet方法的执行流程,如图所示。在applet的生命周期内,当用户将网页上下滚动或是在网页间进行跳转时,方法start和stop会多次被调用。所以要在这些方法中设计合理的逻辑。
图 9.1 Applet方法的执行流程
除了以上四个方法外,Applet类还提供了一些常用的方法。
表 9.2 java.applet.Applet类中常用的方法
方法名 |
描述 |
String getAppletInfo() |
返回applet的作者名称、版权信息、版本号等信息,是一个字符串对象。 |
String getParameter(String parameterName) |
如果applet需要接受参数,调用getParameterInfo方法可以获得指定名称的参数值,它们在HTML文档的<param>标记中定义(参见9.3节)。典型的应用是在init方法中使用。不要试图在构造方法中调用该方法,因为在applet的构造方法被调用时,这些参数是无效的。 |
String[][] getParameterInfo() |
调用getParamenterInfo方法获得参数信息,该方法以二维字符串数组的形式返回applet中的参数信息,包括每个参数的名称、类型和描述。 |
URL getDocumentBase() |
返回applet所嵌入的HTML文档的URL。 |
【例9.1】商品价格计算Applet程序
这个例子演示的是一个用于计算商品价格的applet。输入商品单价和商品数量后,点击计算按钮,就可以显示出商品价格。
//CalculatorApplet.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CalculatorApplet extends JApplet implements ActionListener {
JTextField unitPriceText = new JTextField();
JTextField numberText = new JTextField();
JTextField priceText = new JTextField();
JButton calcBtn = new JButton("Calculate Price");
//Initialize the applet
public void init() {
priceText.setEditable(false);
unitPriceText.setHorizontalAlignment(JTextField.RIGHT);
numberText.setHorizontalAlignment(JTextField.RIGHT);
priceText.setHorizontalAlignment(JTextField.RIGHT);
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(3, 2));
p1.add(new Label("the unit price of product: "));
p1.add(unitPriceText);
p1.add(new Label("the number of product: "));
p1.add(numberText);
p1.add(new Label("the price of product: "));
p1.add(priceText);
p1.setBorder(new javax.swing.border.TitledBorder("Enter unit price and number"));
JPanel p2 = new JPanel();
p2.setLayout(new FlowLayout(FlowLayout.RIGHT));
p2.add(calcBtn);
getContentPane().add(p1, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
calcBtn.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
float unitPrice = (Float.valueOf(unitPriceText.getText())).floatValue();
float number = (Float.valueOf(numberText.getText())).floatValue();
float price = unitPrice * number;
priceText.setText(String.valueOf(price));
}
}
运行结果;
在例子中使用了swing组件,该applet是扩展JApplet来实现的。
init方法负责初始化用户界面,在该方法内创建组件,包括标签、文本域和按钮。
例子中需要处理按钮的点击事件,这就要实现ActionListener监听器,方法actionPerformed负责从文本域中取出数值,通过简单的乘法运算获得结果,并显示在用户界面上。