第09章JavaApplet主讲:程细柱韶关学院计算机科学学院9.1编写AppletJava程序共有两大类一类称为应用程序(Application),前几章介绍的程序都属于这一类。另一类称为Java小应用程序(JavaApplet),也称为小程序。小程序虽然也是使用Java语言编写,但它必须嵌入到HTML文档中,并在浏览器环境下才能运行。9.1.1小程序示例我们将屏幕上输出HelloWorld的程序改为Applet的形式程序9-1小程序示例importjava.awt.Graphics;importjava.applet.Applet;publicclassHelloWorldextendsApplet{Stringhelloworld_text;publicvoidinit(){//重要的起始点helloworld_text=HelloWorld;//信息内容}publicvoidpaint(Graphicsg){//显示信息g.drawString(helloworld_text,25,25);//在指定位置显示信息}}对应的HTML文档htmlBodyCenterappletcode=HelloWorld.classwidth=100height=100/applet/Center/Body/html9.1.2小程序设计过程编写小应用程序的过程必须创建一个自己的类,并继承于Applet类。Applet类属于java.applet包,全称是java.applet.Applet类,继承于Panel类,所以也是一种容器。除了从Panel类继承下来的成员外,还拥有自己特有的成员,从而有它自己的特点。程序员自己创建的类必须是public类型的,且必须是java.applet.Applet类的子类,因此要使用语句importjava.applet.Applet引入所需要的包。9.1.2小程序设计过程(续)小程序通常在图形环境下使用paint()方法绘制要显示的内容,而应用程序中一般是使用System.out.println()方法输出要显示的内容。在浏览器中,每当Applet显示内容需要刷新时,paint()方法都会被调用,一般的程序功能也是放到这个方法内来实现。9.2小程序中使用的方法停止播放声音文件voidstop()循环播放声音文件voidloop()获取Web页位置URLURLgetDocumentBase()获取Applet代码位置的URLURLgetCodeBase()使用指定的url及name获取图像ImagegetImage(URLurl,Stringname)撤消Applet的执行voiddestroy()暂停Applet执行voidstop()启动浏览器运行Appletvoidstart()完成Applet的初始化操作voidinit()功能方法9.2小程序中使用的方法(续)获到同一网页中名为name的AppletAppletgetApplet(Stringname)将url指定的Web页显示于target窗口中voidshowDocument(URLurl,Stringtarget)获取播放指定位置,名称为name的声音文件的AudioClip对象AudioClipgetAudioclip(URLurl,Stringname)获取可用于播放指定位置url处声音文件的AudioClip对象finalstaticAudioClipnewAudioClip(URLurl)播放指定位置url处,名称为name的声音文件voidplay(URLurl,Stringname)功能方法9.2.1基本方法小程序从创建到消亡的整个过程称为它的生命周期,其中涉及四个主要的方法。它们分别是init()、start()、stop()和destroy()。普通应用程序总是从main()方法开始执行,然而小程序与此不同,它是从构造方法开始执行的。在构造方法执行结束以后,浏览器调用小程序中的init()方法,该方法完成小程序的初始化操作。在init()方法执行结束以后,浏览器再调用start()的方法。本方法是Applet的主体,在其中可以执行一些任务或启动相关的线程来执行任务。9.2.1基本方法(续)离开Applet所在页面时调用stop()方法,例如包含Applet的浏览器窗口被最小化或其他窗口被激活时。离开相关的页面时,Applet从“活跃”变为“不活跃”的状态,调用stop()方法可以停止消耗系统资源。当浏览器终止此Applet时,调用destroy()方法。浏览器关闭时也会自动调用,以清除Applet所用的所有资源。9.2.2用于显示Applet的方法Applet中有三个与显示相关的方法:paint()update()repaint()这是专门用于显示及刷新的方法,它们都是在java.awt.Component类中声明的。在图形环境下可以使用Applet的paint()方法绘制要显示的内容。在浏览器中,每当Applet显示内容需要刷新时,都要调用paint()方法。9.2.2用于显示Applet的方法(续)Applet的显示和刷新由一个独立线程控制,称之为AWT线程。当出现以下两种情况时,AWT线程会进行有关的处理。第一种情况,如果Applet部分显示内容被其他窗口覆盖,或显示区域被调整大小、最大最小化等,那么当其他窗口关闭或移开时,曾被覆盖的部分必须重画,此时AWT线程会自动调用paint()方法。第二种情况,当需要重画显示区域时,程序会重新更新显示内容。在程序中,可以使用repaint()方法通知系统要更新显示内容。此时AWT线程会自动调用updata()方法,该方法首先将当前显示画面清空,然后调用paint()方法绘制新的显示内容。9.2.2用于显示Applet的方法(续)update()方法用于更新图形它首先清除背景然后设置前景再调用paint()方法完成Applet中的具体绘图。程序员一般不要重写update()方法。repaint()方法主要用于重绘图形它是通过调用update()方法来实现图形重绘的。当组件外形发生变化时,系统自动调用repaint()方法。一般地程序员也不要重写update()方法。9.2.2用于显示Applet的方法(续)paint()、update()和repaint()这三个方法的关系如图所示:程序9-2在浏览器窗口内画基本图形importjava.awt.*;importjava.applet.Applet;importjava.util.*;publicclassApplet4extendsApplet{RandomRandomNumber=newRandom();ColorImageColor;publicvoidpaint(Graphicsg){//显示信息switch(RandomNumber.nextInt()%5){case0:ImageColor=Color.black;break;case1:ImageColor=Color.blue;break;case2:ImageColor=Color.cyan;break;case3:ImageColor=Color.magenta;break;case4:ImageColor=Color.orange;break;}g.setColor(ImageColor);switch(RandomNumber.nextInt()%5){case0:g.fillRect(25,25,120,200);break;case1:g.drawLine(25,25,120,200);break;default:g.fillOval(25,25,150,200);break;}}}9.3HTML文档9.3.1applet标记编写Applet程序之后,需要编译成对应的类文件,同时还需要创建一个HTML文件,然后在该文件中通过applet标记指定要运行的Applet程序名,将该HTML文件的URL通知浏览器,最后通过浏览器装入并运行该Applet程序。9.3.1applet标记(续)applet标记的语法格式如下:appletcode=appletFile.classwidth=pixelsheight=pixels[codebase=codebaseURL]//指定Applet文件的URL[alt=alternateText]//指定一段可替换文本[name=appletInstanceName]//为Applet指定一个名字[align=alignment]//对齐方式[vspace=pixels][hspace=pixels]//与周围文本的垂直间距和水平间距[paramname=appletAttribute1value=value][paramname=appletAttribute2value=value]…//为Applet指定参数/applet9.3.1applet标记(续)各主要标记的含义是:code=appletFile.class必选项,appletFile.class就是要运行的Applet的文件名,文件名前也可以指定包名,但前面不能有路径名。默认情况下,浏览器在HTML文件所在的服务器目录中查找该Applet文件。width=pixelsheight=pixels必选项,用来指定Applet显示区域的初始宽度和高度(用像素值表示)。codebase=codebaseURL可选项,如果Applet文件与HTML文件不在同一个目录下,此参数指定Applet文件的URL。alt=alternateText可选项,指定一段可替换文本。当浏览器能理解applet标记但不能运行Applet程序时,这段文本可作为提示显示出来。9.3.1applet标记(续)name=appletInstanceName可选项,它为Applet指定一个名字,使得在同一浏览器窗口中运行的其他Applet能够识别该Applet并可与之通信。align=alignment可选项,它指定Applet的对齐方式,可取值为left、right、top、texttop、middle、absmiddle、baseline、bottom和absbottom。vspace=pixelshspace=pixels这两个都是可选项,分别指定Applet与周围文本的垂直间距和水平间距(用像素值表示)。paramname=appletAttribute1value=value可选项,它为Applet指定参数(包括参数的名称和数值)。在Applet中可通过getParameter()方法得到相应的参数。9.3.2Applet参数的读取程序9-3读取参数示例。//p186importjava.awt.*;importjava.applet.*;importjava.util.*;publicclassApplet3extendsApplet{RandomRandomNumber=newRandom();ColorImageColor;intwidth,height;publicvoidpaint(Graphicsg){//显示信息switch(RandomNumber.nextInt()%5){case0:ImageColor=Color.black;break;case1:ImageColor=Color.blue;break;case2:ImageColor=Color.cyan;break;case3:ImageColor=Color.magenta;break;case4:ImageColor=Color.orange;break;}width=Integer.parseInt(getParameter