原文地址: http://www.work100.net/training/java-applet.html 更多教程: 光束云 - 免费课程
Applet
序号 | 文内章节 | 视频 |
---|---|---|
1 | 概述 | - |
2 | Applet的生命周期 | |
3 | 一个简单Applet程序 | |
4 | Applet类 | |
5 | Applet的调用 | |
6 | 获得Applet参数 | |
7 | 指定Applet参数 | |
8 | 应用程序转换成Applet | |
9 | 事件处理 | |
10 | 显示图片 | |
11 | 播放音频 |
请参照如上
章节导航
进行阅读
1.概述
Applet
是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API 支持,所以
Applet
是一个全功能的 Java 应用程序。
如下所示是独立的 Java 应用程序和
applet
程序之间重要的不同:
- Java 中
类继承了Applet
类java.applet.Applet
-
类没有定义Applet
,所以一个main()
程序不会调用Applet
方法main()
-
被设计为嵌入在一个Applet
页面HTML
- 当用户浏览包含
的 HTML 页面,Applet
的代码就被下载到用户的机器上Applet
- 要查看一个
需要 JVM。 JVM 可以是 Web 浏览器的一个插件,或一个独立的运行时环境Applet
- 用户机器上的 JVM 创建一个
类的实例,并调用Applet
生命周期过程中的各种方法Applet
-
有 Web 浏览器强制执行的严格的安全规则,Applet
的安全机制被称为沙箱安全Applet
-
需要的其他类可以用 Java 归档(Applet
)文件的形式下载下来JAR
2.Applet的生命周期
Applet 类中的四个方法给我们提供了一个框架,你可以在该框架上开发小程序:
- init: 该方法的目的是为你的
提供所需的任何初始化。在Applet
标记内的Applet
标签被处理后调用该方法。param
- start: 浏览器调用
方法后,该方法被自动调用。每当用户从其他页面返回到包含init
的页面时,则调用该方法。Applet
- stop: 当用户从包含
的页面移除的时候,该方法自动被调用。因此,可以在相同的Applet
中反复调用该方法。Applet
- destroy: 此方法仅当浏览器正常关闭时调用。因为
只有在Applet
网页上有效,所以你不应该在用户离开包含HTML
的页面后遗漏任何资源。Applet
- paint: 该方法在
方法之后立即被调用,或者在start()
需要重绘在浏览器的时候调用。Applet
方法实际上继承于paint()
。java.awt
3.一个简单Applet程序
下面是一个简单的
Applet
程序
HelloWorldApplet.java
:
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet
{
public void paint (Graphics g)
{
g.drawString ("Hello World", 25, 50);
}
}
这些
import
语句将以下类导入到我们的
Applet
类中:
java.applet.Applet.
java.awt.Graphics.
没有这些
import
语句,Java 编译器就识别不了
Applet
和
Graphics
类。
4.Applet类
每一个
Applet
都是
java.applet.Applet
类的子类,基础的
Applet
类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务。
这些方法做了如下事情:
- 得到
的参数Applet
- 得到包含
的Applet
文件的网络位置HTML
-
类目录的网络位置Applet
- 打印浏览器的状态信息
- 获取一张图片
- 获取一个音频片段
- 播放一个音频片段
- 调整此
的大小Applet
除此之外,
Applet
类还提供了一个接口,该接口供
Viewer
或浏览器来获取
Applet
的信息,并且来控制
Applet
的执行。
Viewer
可能是:
- 请求
作者、版本和版权的信息Applet
-
识别的参数的描述Applet
- 初始化
Applet
- 销毁
Apple
- 开始执行
Applet
- 结束执行
Applet
Applet
类提供了对这些方法的默认实现,这些方法可以在需要的时候重写。
"
Hello,World
applet
都是按标准编写的。唯一被重写的方法是
paint
方法。
5.Applet的调用
Applet
Applet
<applet>
标签是在HTML文件中嵌入
Applet
的基础。以下是一个调用"
Hello World
applet
的例子;
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="HelloWorldApplet.class" width="320" height="120">
If your browser was Java-enabled, a "Hello, World"
message would appear here.
</applet>
<hr>
</html>
注意: 你可以参照 HTML Applet 标签来更多的了解从 HTML 中调用 applet 的方法。
<applet>
标签的属性指定了要运行的
Applet
width
height
用来指定
Applet
运行面板的初始大小。
Applet
必须使用
</applet>
标签来关闭。
如果
Applet
接受参数,那么参数的值需要在
<param>
标签里添加,该标签位于
<applet>
</applet>
之间。浏览器忽略了
applet
标签之间的文本和其他标签。
不支持 Java 的浏览器不能执行
<applet>
</applet>
。因此,在标签之间显示并且和
applet
没有关系的任何东西,在不支持的 Java 的浏览器里是可见的。
Viewer
或者浏览器在文档的位置寻找编译过的 Java 代码,要指定文档的路径,得使用
<applet>
标签的
codebase
属性指定。
如下所示:
<applet codebase="http://amrood.com/applets"
code="HelloWorldApplet.class" width="320" height="120">
Applet
所在一个包中而不是默认包,那么所在的包必须在
code
属性里指定,例如:
<applet code="mypackage.subpackage.TestApplet.class"
width="320" height="120">
6.获得Applet参数
下面的例子演示了如何使用一个
Applet
响应来设置文件中指定的参数。该
Applet
显示了一个黑色棋盘图案和第二种颜色。
第二种颜色和每一列的大小通过文档中的
Applet
的参数指定。
CheckerApplet
在
init()
方法里得到它的参数。也可以在
paint()
方法里得到它的参数。然而,在
Applet
开始得到值并保存了设置,而不是每一次刷新的时候都得到值,这样是很方便,并且高效的。
Applet viewer
或者浏览器在
Applet
每次运行的时候调用
init()
方法。在加载
Applet
之后,
Viewer
立即调用
init()
方法(
Applet.init()
什么也没做),重写该方法的默认实现,添加一些自定义的初始化代码。
Applet.getParameter()
方法通过给出参数名称得到参数值。如果得到的值是数字或者其他非字符数据,那么必须解析为字符串类型。
下例是
CheckerApplet.java
的修改:
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()
方法和私有的
parseSquareSize()
方法:
public void init ()
{
String squareSizeParam = getParameter ("squareSize");
parseSquareSize (squareSizeParam);
String colorParam = getParameter ("color");
Color fg = parseColor (colorParam);
setBackground (Color.black);
setForeground (fg);
}
private void parseSquareSize (String param)
{
if (param == null) return;
try {
squareSize = Integer.parseInt (param);
}
catch (Exception e) {
// 保留默认值
}
}
该
Applet
调用
parseSquareSize()
,来解析
squareSize
参数。
parseSquareSize()
调用了库方法
Integer. parseInt()
该方法将一个字符串解析为一个整数,当参数无效的时候,
Integer.parseInt()
抛出异常。
因此,
parseSquareSize()
方法也是捕获异常的,并不允许
Applet
接受无效的输入。
Applet
parseColor()
方法将颜色参数解析为一个
Color
值。
parseColor()
方法做了一系列字符串的比较,来匹配参数的值和预定义颜色的名字。你需要实现这些方法来使
Applet
工作。
7.指定Applet参数
如下的例子是一个
HTML
文件,其中嵌入了
CheckerApplet
类。HTML文件通过使用
<param>
标签的方法给
applet
指定了两个参数。
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue">
<param name="squaresize" value="30">
</applet>
<hr>
</html>
注意: 参数名字大小写不敏感。
8.应用程序转换成Applet
将图形化的 Java 应用程序(是指,使用
AWT
的应用程序和使用 Java 程序启动器启动的程序)转换成嵌入在web页面里的
applet
是很简单的。
下面是将应用程序转换成
Applet
的几个步骤:
- 编写一个
页面,该页面带有能加载HTML
代码的标签。applet
-
类的子类,将该类设置为JApplet
。否则,public
不能被加载。Applet
- 消除应用程序的
方法。不要为应用程序构造框架窗口,因为你的应用程序要显示在浏览器中。main()
- 将应用程序中框架窗口的构造方法里的初始化代码移到
Applet
方法中,你不必显示的构造init()
对象,浏览器将通过调用Applet
方法来实例化一个对象。init()
- 移除对
方法的调用,对于setSize()
来讲,大小已经通过Applet
文件里的HTML
width
参数设定好了。height
-
方法的调用。setDefaultCloseOperation()
不能被关闭,它随着浏览器的退出而终止。Applet
- 如果应用程序调用了
方法,消除对该方法的调用。setTitle()
不能有标题栏。(当然你可以给通过applet
html
标签给网页自身命名)title
- 不要调用
,setVisible(true)
是自动显示的。Applet
9.事件处理
Applet
类从
Container
类继承了许多事件处理方法。
Container
类定义了几个方法,例如:
processKeyEvent()
processMouseEvent()
,用来处理特别类型的事件,还有一个捕获所有事件的方法叫做
processEvent
为了响应一个事件,
Applet
必须重写合适的事件处理方法。
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) {
//Draw a Rectangle around the applet's display area.
g.drawRect(0, 0,
getWidth() - 1,
getHeight() - 1);
//display the string inside the rectangle.
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! ");
}
}
如下调用该
Applet
:
<html>
<title>Event Handling</title>
<hr>
<applet code="ExampleEventHandling.class"
width="300" height="300">
</applet>
<hr>
</html>
最开始运行,
Applet
显示 "
initializing the applet. Starting the applet.
",然后你一点击矩形框,就会显示 "
mouse clicked
" 。
10.显示图片
Applet
能显示
GIF
JPEG
BMP
等其他格式的图片。为了在
Applet
中显示图片,你需要使用
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();
// Display in browser status bar
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>
11.播放音频
Applet
能通过使用
java.applet
包中的
AudioClip
接口播放音频。
AudioClip
接口定义了三个方法:
-
: 从一开始播放音频片段一次public void play()
-
: 循环播放音频片段public void loop()
-
: 停止播放音频片段public void stop()
为了得到
AudioClip
对象,你必须调用
Applet
getAudioClip()
方法。无论
URL
指向的是否是一个真实的音频文件,该方法都会立即返回结果。
直到要播放音频文件时,该文件才会下载下来。
如下实例演示了播放音频的所有步骤:
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>
你可以使用你电脑上的
test.wav
来测试上面的实例。
上一篇:
多线程下一篇:
文档注释如果对课程内容感兴趣,可以扫码关注我们的或
公众号
,及时关注我们的课程更新
QQ群
