Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。
Applet特点
- Applet 类继承了 java.applet.Applet 类
- Applet 类没有定义 main(),所以一个 Applet 程序不会调用 main() 方法
- Applet 被设计为嵌入在一个 HTML 页面
- 用户浏览含有Applet的HTML页面时,Applet代码会下载到电脑上
- 查看Applet需要JVM,或者浏览器的一个插件,并调用Applet生命周期中的方法
Applet生命周期
applet中四个方法提供一个框架
- init: 为 Applet 提供所需的初始化。在 Applet 标记内的 param 标签被处理后调用该方法。
- start: 浏览器调用 init 方法后,该方法被自动调用。返回到含 Applet 的页面时,则调用该方法。
- stop: 从含 Applet 的页面移除时,方法自动被调用。可以在相同的 Applet 中反复调用该方法
- destroy: 仅当浏览器正常关闭时调用。
- paint: 在 start() 方法调用之后立即被调用,或者在 Applet 需要重绘在浏览器的时候调用。paint() 方法实际上继承于 java.awt。
简单的applet程序:
import java.applet.*; //导入applet包 必须要有的
import java.awt.*;
public class HelloWorldApplet extends Applet //继承Applet
{
public void paint (Graphics g)
{
g.drawString ("Hello World", 25, 50);
}
}
Applet 类
基础的 Applet 类提供了供衍生类调用的方法
执行了以下事件:
- 得到 Applet 的参数
- 得到包含 Applet 的 HTML 文件的网络位置
- 得到 Applet 类目录的网络位置
- 打印浏览器的状态信息
- 获取一张图片
- 获取一个音频片段
- 播放一个音频片段
- 调整此 Applet 的大小
Applet 类提供了一个接口 Viewer:
- 请求 Applet 作者、版本和版权的信息
- 请求 Applet 识别的参数的描述
- 初始化 Applet
- 销毁 Applet
- 开始执行 Applet
- 结束执行 Applet
必要的时候对方法进行重写。
Applet 的调用
Applet 是一个全功能的 Java 应用程序。
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="HelloWorldApplet.class" width="320" height="120"> <!-- width 和 height 用来指定 Applet 运行面板的初始大小-->
</applet>
<hr>
</html>
- HTML文件中嵌入 Applet
- Applet的参数的值需要在 <param> 标签里添加
- 不支持 Java 的浏览器不能执行 <applet> 和 </applet>。因此,在标签之间显示并且和 applet 没有关系的任何东西,在不支持的 Java 的浏览器里是可见的。
- codebase用来指定属性
<applet codebase="http://amrood.com/applets"
code="HelloWorldApplet.class" width="320" height="120">
获得applet参数
import java.applet.*;
import java.awt.*;
public class CheckerApplet extends Applet
{
int squareSize = 50;// 初始化默认大小
public void init () {}
private void parseSquareSize (String param) {}
private Color parseColor (String param) {}
public void paint (Graphics g) {}
}
//CheckerApplet 类的 init() 方法
public void init ()
{
String squareSizeParam = getParameter ("squareSize");
parseSquareSize (squareSizeParam);
String colorParam = getParameter ("color");
Color fg = parseColor (colorParam);
setBackground (Color.black);
setForeground (fg);
}
//私有的 parseSquareSize() 方法
private void parseSquareSize (String param)
{
if (param == null) return;
try {
squareSize = Integer.parseInt (param);
}
catch (Exception e) {
// 保留默认值
System.out.println(e.getMessage);
}
}
指定 applet 参数
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue"><!--通过使用 <param> 标签的方法给 applet 指定了两个参数。-->
<param name="squaresize" value="30">
</applet>
<hr>
</html>
事件处理
Applet 类从 Container 类继承了许多事件处理方法,processKeyEvent() 和processMouseEvent(),用来处理特别类型的事件, processEvent()捕获所有事件的方法.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;
public class ExampleEventHandling extends Applet
implements MouseListener {
StringBuffer strBuffer;
public void init() {
addMouseListener(this);
strBuffer = new StringBuffer();
addItem("initializing the applet ");
}
public void start() {
addItem("starting the applet ");
}
public void stop() {
addItem("stopping the applet ");
}
public void destroy() {
addItem("unloading the applet");
}
void addItem(String word) {
System.out.println(word);
strBuffer.append(word);
repaint();
}
public void paint(Graphics g) {
g.drawRect(0, 0, getWidth() - 1,getHeight() - 1);
g.drawString(strBuffer.toString(), 10, 20);
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
addItem("mouse clicked! ");
}
}
<html> <!--调用上面事件的applet-->
<title>Event Handling</title>
<hr>
<applet code="ExampleEventHandling.class"
width="300" height="300">
</applet>
<hr>
</html>
显示图片
使用 java.awt.Graphics 类的drawImage()方法。
import java.applet.*;
import java.awt.*;
import java.net.*;
public class ImageDemo extends Applet
{
private Image image;
private AppletContext context;
public void init()
{
context = this.getAppletContext();
String imageURL = this.getParameter("image");
if(imageURL == null)
{
imageURL = "java.jpg";
}
try
{
URL url = new URL(this.getDocumentBase(), imageURL);
image = context.getImage(url);
}catch(MalformedURLException e)
{
e.printStackTrace();
context.showStatus("Could not load image!");
}
}
public void paint(Graphics g)
{
context.showStatus("Displaying image");
g.drawImage(image, 0, 0, 200, 84, null);
g.drawString("www.javalicense.com", 35, 100);
}
}
调用图片applet
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="300" height="200">
<param name="image" value="java.jpg">
</applet>
<hr>
</html>
播放音频
Applet 能通过使用 java.applet 包中的 AudioClip 接口播放音频。AudioClip 接口定义了三个方法:
- public void play(): 从一开始播放音频片段一次。
- public void loop(): 循环播放音频片段
- public void stop(): 停止播放音频片段
为了得到 AudioClip 对象,必须调用 Applet 类的 getAudioClip() 方法。
import java.applet.*;
import java.awt.*;
import java.net.*;
public class AudioDemo extends Applet
{
private AudioClip clip;
private AppletContext context;
public void init()
{
context = this.getAppletContext();
String audioURL = this.getParameter("audio");
if(audioURL == null)
{
audioURL = "default.au";
}
try
{
URL url = new URL(this.getDocumentBase(), audioURL);
clip = context.getAudioClip(url);
}catch(MalformedURLException e)
{
e.printStackTrace();
context.showStatus("Could not load audio file!");
}
}
public void start()
{
if(clip != null)
{
clip.loop();
}
}
public void stop()
{
if(clip != null)
{
clip.stop();
}
}
}
调用音频applet
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="0" height="0">
<param name="audio" value="test.wav">
</applet>
<hr>