Java Applet基础

 Java Applet基础

在第一章中我们已经知道,一个Java applet程序中必须有一个类是Applet类的子类。我们称该子类是Java applet的主类,并且主类必须修饰为public.Applet类是包java.applet中的一个类,同时它还是包java.awtContainer(容器) 类的子类,因此Java applet的主类的实例是一个容器。

我们已经知道,Java applet程序通过浏览来执行,因此它和Java应用程序有许多不同之处。

下面我们通过一个例子来说明一个Java applet的全过程。

1.用记事本编写下列源文件

例子1

import java.applet.*;import java.awt.*;

public class Example7_1 extends Applet

{Button button1; Button button2;

    int sum;

    public void init()

    { button1=new Button("yes");

      button2=new Button("No"); 

      add(button1);

      add(button2);    

    }

    public void start()

    {  sum=0;

        for(int i=1;i<=100;i++)

         {sum=sum+i;}

    }

    public void stop()

    { }

    public void destroy()

    { }

    public void paint(Graphics g)

    {g.setColor(Color.blue);

     g.drawString("程序设计方法",20,60);

     g.setColor(Color.red);

     g.drawString("sum=  ",20,100);

    }

}

一个Java applet也是由若干个类组成的,但必须有一个类扩展了Applet类,即它是Applet类的子类,Applet类是系统提供的类。我们把这个类叫做这个Java applet的主类,Java applet的主类必须是public的。一个Java applet不再需要main方法,但必须有一个类扩展了Applet类。当我们保存上面的源文件时,必须命名为Example7_1.java。假设我们保存Example7_1.javac:/2000中。

2.编译

c:/2000>/javac Example7_1.java

编译成功后,文件夹2000下会生成一个Example7_1.class文件。如果源文件有多个类,将生成多个class文件,都和源文件在同一文件夹里。

3.运行

Java applet必须由浏览器来运行,因此我们必须编写一个超文本文件(含有applet标记的web页)告诉浏览器来运行这个Java applet

下面是一个最简单的一个html文件,告诉浏览器运行我们的Java apple。我们使用记事本编辑如下一个超文本文件,并保存在C:/2000中,命名为:Example7_1.html(扩展名必须是html,主文件名只要符合Java标识符规定即可)。

<applet code=Example7_1.class height=300 width=200>

</applet>

超文本中的标记 <apple….    >  </applet> 告诉浏览器将运行一个Java applet code告诉浏览器运行哪个Java appletcode的符号“=”后面是主类的字节码文件。

一个Java applet的执行过程称为这个Java applet的生命周期。一个Java applet的生命周期内涉及如下方法,这些方法也正是一个完整的Java applet所包含的,它们是:

init () start()stop()destroy()、paint(Graphics g) 方法。

 

x

y

7.1主类的对象

我们已经知道类是对象的模板,那么上述Java applet的主类的对象是由谁创建的呢?这些方法又是怎样被调用执行的呢?

当浏览器打开超文本文件Example7_1.html,发现有applet标记时,浏览器为我们创建了一个主类. Example7_1的一个对象。图7.1中的灰色部分。

它的大小由超文本中的width height来确定。由于Applet类也是Contaier的间接子类,因此,主类的实例也是一个容器,容器有相应的坐标系统,单位是像素,原点是容器的左上角。容器可以使用add()方法放置组件。

l         初始化:init()

这个对象首先自动调用init()方法完成必要的初始化工作。初始化的主要任务是创建所需要的对象、设置初始状态、装载图像、设置参数等。init()方法格式如下:

public void init()

{ ……

}

init()方法只被调用执行一次。

l         启动 :start()

初始化之后,仅接着自动调用start()方法。在程序的执行过程中,init()方法只被调用执行一次。但start()方法将多次被自动调用执行。除了进入执行过程时调用方法start()外,当你离开applet所在的Web页面转到其它页面、然后又返回时,start()将再次被调用,但不再调用init()方法。start()方法的格式如下:

public void start()

{  ……

}

l         停止 :stop()

当浏览器离开Java applet所在的页面转到其它页面时,stop()方法被调用。如果浏览器又回到此页,则start()又被调用来启动 Java applet.Java applet的生命周期中,stop()方法也可以被调用多次。如果你在小程序中设计了播放音乐的功能,那么,如果你没有在stop()方法中给出停止播放它的有关语句,当你离开此页去浏览其他页时,音乐将不能停止。如果没有定义stop()方法,当用户离开Java applet所在的页面时,Java applet将继续使用系统的资源。若定义了stop()方法,则可以挂起applet的执行。stop()方法的格式为:

public void stop()

{ ……

}

l         删除:destroy()

当浏览器结束浏览时,执行destroy()方法,结束applet 的生命。

l         描绘:paint(Graphics g)

paint(Graphics g)方法可以使一个applet在屏幕上显示某些信息,如文字、色彩、背景或图像等。在applet 的生命周期内可能多次地被随机的调用。例如,当applet被其他页面遮挡,然后又重新放到最前面、改变浏览器窗口的大小、以及applet本身需要显示信息时,paint()方法都会被自动调用。

与上述4种方法不同的是,paint()方法有一个参数g浏览器为您产生一个Graphics类的实例,并传递给方法paint()中的参数 g ,因此,你不妨就把 g理解为一个画笔。

综上所述,一个Java applet主类的一般格式为:

 public class myclassname extends java.applet.Applet

{ public void  init()

       {…}

 public void start()

       {… }

 public void stop()

       { …}

 public void destroy()

       {.. …}

 public void paint(Graphics g)

      {……}

………

}

其中的五种方法根据需要可全部定义,也可以定义一部分方法。

下面我们看一个例子,上机观察一下各个方法被调用执行的次数。

例子2

import java.applet.*;

import java.awt.*;

public class Example7_2 extends Applet

{ int initcount=0,startcount=0,stopcount=0,destroycount=0,paintcount=0;

   public void init()

   { initcount=initcount+1;}

   public void start()

   { startcount++;}

   public void stop()

   { stopcount++;}

   public void destroy()

   { destroycount++;}

   public void paint(Graphics g)

   { paintcount++;

     g.drawString("initcount   ="+initcount,10,20);

     g.drawString("startcount  ="+startcount,10,40);

     g.drawString("stopcount   ="+stopcount,10,60);

     g.drawString("deatroycount="+destroycount,10,80);    

     g.drawString("paintcount  ="+paintcount,10,100);

   }

}

l         关于repaint()方法

当你使用repaint()方法时,将导致下列事情发生:

程序首先清除paint()方法以前所画的内容,然后再调用paint()方法。

在下面的例子中,我们在start()方法中,使用了 rapaint()方法,因此每当小程序调用 start()方法时,将会导致paint()方法以前所画的内容消失,并紧接着再调用paint()方法。下列小程序显示了每当调用 start()方法时,小程序中的字符串不断地往下走。

例子3

import java.applet.*;import java.awt.*;

public class Example7_3 extends Applet

{  int x;

   public void init()

   {  x=5;  }  

  public void start()

   { x=x+20;  repaint(); }

  public void stop()   {}

   public void paint(Graphics g)

   {g.drawString("我们是大学生",20,x+10); }  

}

 

1.查阅编写网页的有关书籍,总结出在网页中加入小应用程序的更多技术细节。

2我们可以在超文本中使用若干个<Param…>标志把值传递到小程序中:

<param name=名字串  value=值串>

写出下列小程序的输出结果,小程序和运行该小程序的超文本文件如下:

<applet code=E2.class width=200 height=200>

<Param name="girl"  value ="160">

<Param name="boy"  value ="175">

</applet>

import java.awt.*;import java.applet.*;

public class E2 extends Applet

{int x=8,y=9;

 public void init()

 {String s1=getParameter("girl");//html得到"girl"的值(字符串类型)。

  String s2=getParameter("boy");//html得到"boy"的值(字符串类型)。

  x=Integer.parseInt(s1);y=Integer.parseInt(s2);

 }

public void paint(Graphics g)

 {g.drawString("x="+x+","+"y="+y);

 }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值