Java Applet 基础
Applet是一种java程序,一般运行在支持Java的web浏览器内,用完整的Java API支持,是一个全功能的Java应用程序
-
独立的Java引用程序和applet程序间的区别
- Java中Applet类继承了java.applet.Applet类
- Applet类没有定义
main()
,所以一个Applet程序不会调用main()
方法 - Applet被设计为嵌入在一个HTML页面
- 当用户浏览包含Applet的HTML页面,Applet的代码就被下载到用户的机器上
- 要查看一个Applet需要JVM。JVM可以是文本浏览器的一个插件,或者独立的运行时环境
- 用户机器上的JVM创建一个Applet类的实例,并调用Applet声明周期过程中的各种方法
- Applet有web浏览器强制执行的严格的安全规则,Applet的安全机制被称为沙箱安全
- Applet需要的其他类可以用到Java归档(JAR)文件的形式下载下来
-
Applet的生命周期
init
:该方法的目的是为你的Applet提供所需的任何初始化。在Applet标记内的param
标签被处理后调用该方法start
:浏览器调用init
方法后,该方法被自动调用;每当用户从其他页面返回到包含Applet的页面时,则调用该方法stop
:当用户从包含Applet的页面移除时,该方法自动被调用;可以在相同的Applet中反复调用该方法destory
:此方法仅当浏览器正常关闭时调用。因为Applet只在HTML网页上有效,不应该在用户离开包含Applet的页面后遗漏任何资源paint
:该方法在start()
方法之后立即被调用,或者在Applet需要重绘在浏览器的时候调用。paint()
方法实际上继承于java.awt
-
简单的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) //在画布(25,50)出绘制字符串 } } // Applet的调用 <html> <title>The Hello,World Applet</title> <hr> <applet code="HelloWorldApplet.class" width="320" height="120"> //hello world will be here </applet> <hr> </html>
-
Applet 类
基础的Applet类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务:
得到Applet的参数、得到包括Applet的HTML文件的网络位置、得到Applet类目录的网络位置、打印浏览器的状态信息、获取一张图片、获取一个音频片段、播放一个音频片段、调整Applet的大小
Applet提供一个接口供Viewer
或浏览器来获取Applet的信息,并且来控制Applet的执行:
请求Applet作者,版本和版权信息、请求Applet识别的参数的描述、初始化Applet、销毁Applet、开始执行Applet、结束执行Applet -
Applet的调用
<applet>
标签的属性指定要运行的Applet类。width
和height
用来指定Applet运行面板的初始大小。Applet必须使用标签来关闭- 如果Applet接收参数,参数的值需要在
<param>
标签里添加,该标签位于 - 不支持Java的浏览器,
<applet>
之间的内容可见 codebase
属性指定文档路径- 如果Applet所在一个包中而不是默认包,所在的包必须包含在
code
属性里
-
指定applet参数
<html> <title>指定applet参数</title> <hr> <applet code="CheckerApplet.class" width="480" height="320"> <param name="color" value="blue"> <param name="squaresize" value="30">//参数名大小写不敏感 </applet> <hr> <html>
-
获得applet参数
-
程序在
init()
方法里得到它的参数,也可以在paint()
方法里得到参数。Applet开始得到值并保存了设置,而不是每次刷新的时候都得到值 -
Applet viewer或者浏览器在Applet每次运行的时候调用
init()
方法。在加载完Applet之后,Viewer立即调用init()
方法,重写该方法的默认实现,添加一些自定义的初始化代码 -
Applet.getParameter()
方法通过给出参数名称得到参数值。如果得到的值是数字或者其他非字符数据,必须解析为字符串类型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 () { Stirng 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
将图形化的Java应用程序——使用AWT的应用程序和使用Java程序启动器的程序,转换成嵌入在web页面里的applet是很简单的,基本步骤如下:
- 编写一个HTML页面,该页面带有能加载applet代码的标签
- 编写一个JApplet类的子类,将该类设置为public。否者,Applet不能被加载
- 消除应用程序的
mian()
方法。不要为应用程序构造框架窗口,因为应用程序要显示在浏览器中 - 将应用程序中框架窗口的构造方法里的初始化代码移到Applet的
init()
方法中,不必显示的构造Applet对象,浏览器通过调用init()
方法来实例化一个对象 - 移除对
setSize()
方法的调用,对于Applet,大小已经通过HTML文件里的width和height参数设置好了 - 移除对
setDefaultCloseOperation()
方法的调用。Applet不能被关闭,它随着浏览器的退出而终止 - 如果应用程序调用了
setTitle()
方法,消除对该方法的调用,applet不能有标题栏 - 不要调用
setVisible(true)
,Applet是自动显示的
-
事件处理
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 destory() { 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"); } } // 调用该applet <html> <title>Event Handle</title> <hr> <applet code="ExampleEventHandling.class" width="300" height="300"> </applet> <hr> </html>