Java-applet

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的调用

  1. <applet>标签的属性指定要运行的Applet类。widthheight用来指定Applet运行面板的初始大小。Applet必须使用标签来关闭
  2. 如果Applet接收参数,参数的值需要在<param>标签里添加,该标签位于之间。浏览器忽略了applet标签之间的文本和其他标签
  3. 不支持Java的浏览器,<applet>之间的内容可见
  4. codebase属性指定文档路径
  5. 如果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参数

    1. 程序在init()方法里得到它的参数,也可以在paint()方法里得到参数。Applet开始得到值并保存了设置,而不是每次刷新的时候都得到值

    2. Applet viewer或者浏览器在Applet每次运行的时候调用init()方法。在加载完Applet之后,Viewer立即调用init()方法,重写该方法的默认实现,添加一些自定义的初始化代码

    3. 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是很简单的,基本步骤如下:
    1. 编写一个HTML页面,该页面带有能加载applet代码的标签
    2. 编写一个JApplet类的子类,将该类设置为public。否者,Applet不能被加载
    3. 消除应用程序的mian()方法。不要为应用程序构造框架窗口,因为应用程序要显示在浏览器中
    4. 将应用程序中框架窗口的构造方法里的初始化代码移到Applet的init()方法中,不必显示的构造Applet对象,浏览器通过调用init()方法来实例化一个对象
    5. 移除对setSize()方法的调用,对于Applet,大小已经通过HTML文件里的width和height参数设置好了
    6. 移除对setDefaultCloseOperation()方法的调用。Applet不能被关闭,它随着浏览器的退出而终止
    7. 如果应用程序调用了setTitle()方法,消除对该方法的调用,applet不能有标题栏
    8. 不要调用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>
      
posted @ 2017-08-31 21:21  YFIFE  阅读(250)  评论(0编辑  收藏  举报