第12章JavaApplet本章导读1.JavaApplet的运行原理2.JavaApplet中播放声音3.网页向JavaApplet传值4.JavaApplet中使用AWT组件5.JavaApplet中使用Swing组件6.JavaApplet中绘制图形7.JavaApplet中绘制图像8.JavaApplet播放幻灯片和动画9.JavaApplet的网络功能12.1JavaApplet的运行原理1.JavaApplet概述2.运行原理以下是一个JavaApplet程序,我们用这个程序来说明Javaapplet运行原理。(1)网页的编写JavaApplet必须由浏览器来运行,因此我们必须编写一个超文本文件,告诉浏览器来运行这个JavaApplet。假设Applet主类的名字是Boy,下面是一个简单的html文件“like.html”,appletcode=Boy.classheight=180width=300/applet“like.html”文件告诉浏览器运行主类是Boy的JavaApplet。超文本文件“like.html”中的标记apple…和/applet告诉浏览器将运行一个JavaApplet,code告诉浏览器运行哪个JavaApplet。code“=”后面是主类的字节码文件。(2)JavaApplet的生命周期一个JavaApplet的执行过程称为这个JavaApplet的生命周期。一个JavaApplet的生命周期会涉及如下方法的调用执行:init()、start()、stop()、destroy()、paint(Graphicsg)JVM创建的主类Boy的对象在生命周期内将有下列行为:1)浏览器内置的JVM创建了主类Boy对象后,立刻通知这个对象调用init()方法完成必要的初始化工作。初始化的主要任务是创建所需要的对象、设置初始状态、装载图像、设置参数等。2)对象仅接着自动调用start()方法。在程序的执行过程中,init()方法只被调用执行一次。但start()方法将多次被自动调用执行。除了进入执行过程时调用方法start()外,当用户从JavaApplet所在的Web页面转到其他页面,然后又返回时,start()将再次被调用,但不再调用init()方法。当浏览器离开JavaApplet所在的页面转到其它页面时,主类创建的对象将调用stop()方法。如果浏览器又回到此页,则start()又被调用来启动JavaApplet。在JavaApplet的生命周期中,stop()方法也可以被调用多次。如果你在JavaApplet中设计了播放音乐的功能,而没有在stop()方法中给出停止播放它的有关语句,那么当离开此页去浏览其他页时,音乐将不能停止。如果没有定义stop()方法,当用户离开JavaApplet所在的页面时,JavaApplet将继续使用系统的资源。若定义了stop()方法,则可以挂起JavaApplet的执行。当浏览器结束浏览时,主类创建的对象自动执行destroy()方法,结束JavaApplet的生命。该方法是父类Applet中的方法,不必重写这个方法,直接继承即可。paint(Graphicsg)方法可以使一个JavaApplet在容器上显示某些信息,如文字、色彩、背景或图像等。在JavaApplet的生命周期内可以多次调用。例如,当JavaApplet被其它页面遮挡,然后又重新放到最前面、改变浏览器窗口的大小、以及JavaApplet本身需要显示信息时,主类创建的对象都会自动调用paint()方法。3.关于repaint()方法和update(Graphicsg)repaint()方法和update(Graphicsg)是Component类中的一个方法。当调用repaint方法时,程序首先清除paint()方法以前所画的内容,然后再调用paint()方法。实际上当我们调用repaint()方法时,程序自动去调用update(Graphicsg)方法,浏览器的Java运行环境产生一个Graphics类的实例,传递给方法update(Graphicsg)中的参数g,这个方法的功能是:清除paint()方法以前所画的内容,然后再调用paint方法。因此我们可以在子类中重写update方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。在下面的例子2中,我们在paint()方法中,使用了repaint()方法,因此每当JavaApplet调用paint()方法时,就会调用update方法。程序重写了update方法,清除paint方法所绘制的部分内容,并紧接着再调用paint()方法。返回12.2JavaApplet中播放声音用Java可以编写播放..au、.aiff、.wav、.midi、.rfm格式的音频。au格式是Java早期唯一支持的音频格式。要在JavaApplet中播放声音,可以使用Applet的一个静态的方法(类方法):newAudioClip(URLurl,Stringname)或Applet类的实例方法:getAudioClip(Urlurl,Stringname)根据参数url提供的地址,以及该处的声音文件name,可以获得一个用于播放的音频对象(AudioClip类型对象)。这个音频对象可以使用下列方法来处理声音文件。play()播放声音文件name。loop()循环播放name。stop()停止播放name。例子3返回12.3网页向JavaApplet传值我们可以在超文本中使用若干个Param…标志把值传递到JavaApplet中,这样就实现动态地向程序传递信息,不必重新编译程序,便于程序的维护和使用。例子4返回12.4JavaApplet中使用AWT组件Applet类是容器的间接子类,因此我们可以在这个容器中添加组件,处理组件事件,完成一些工作。由于目前的浏览器仅仅支持JDK1.1版本中的类库,所以JavaApplet中只能使用JDK1.1版本公布的java.awt包中的组件,比如Button、TextField、TextArea等。在下面的例子中,我们把JavaApplet的布局设置为BorderLayout布局。返回12.5JavaApplet中使用Swing组件如果你的机器安装了SDK1.4以后的版本,那么你的浏览器中的JVM就会被更新为当前SDK所带的JVM,这样一来,你的浏览器就可以使用javax.awing包中的组件。使用javax.swing包中的组件时,JavaApplet的主类应当是JApplet的子类。JApplet是Applet的一个直接子类,在javax.swing包中。JApplet有许多新的特性:不可以把组件直接添加到JApplet容器中。JApplet容器也含有一个称为内容面板的容器,应当把组件添加到内容面板中。不能为JApplet容器设置布局,而应当为JApplet容器的内容面板设置布局。内容面板的默认布局是BorderLayout布局。JApplet容器通过调用方法:getContentPane(),得到内容面板。例子6返回12.6JavaApplet中绘制图形1.绘制文本可以使用drawString方法在屏幕上显示串对象。drawString(Strings,intx,inty)从参数x、y指定的坐标位置处,从左向右绘制参数s指定的字符串。drawChars(chardata[],intoffset,intlength,intx,inty)绘制data数组中的部分字符,length指定数组中要连续绘制的字符的个数,offset是首字符在数组中的位置。2.绘制直线drawLine(intx1,inty1,intx2,inty2)绘制从起点(x1,y1)到终点(x2,y2)的直线段。3.绘制矩形drawRect(intx,inty,intw,inth)绘制矩形。fillRect(intx,inty,intw,inth)填充矩形。矩形的左上角的坐标由参数x、y指定,矩形的宽和高由参数w、h指定。4.绘制圆角矩形drawRoundRect(intx,inty,intw,inth,intarcW,intarcH)绘制圆角矩形fillRoundRect(intx,inty,intw,inth,intarcW,intarcH)填充圆角矩形参数arcW、arcH指定圆角的尺寸,见图12.4中的4个黑角部分。5.绘制椭圆drawOval(intx,inty,intw,inth)绘制椭圆。drawOval(intx,inty,intw,inth)绘制填充椭圆。x、y给出椭圆距x轴和y轴的距离,参数w、h给出椭圆的宽和高。6.绘制圆弧圆弧就是某个椭圆的一部分。drawArc(intx,inty,intwidth,intheight,intstarAngle,intarcAngle)绘制圆弧fillArc(intx,inty,intwidth,intheight,intstarAngle,intarcAngle)填充圆弧x、y、width、heigth指定椭圆的位置和大小,参数starAngle和arcAngle的单位都是“度”。而起始角度的0度是3点钟的方位。参数starAngle,arcAngle表示从starAngle的角度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是正值时为逆时针,否则为顺时针。starAngle的值可以是负值,例如-90度是6点的方位。7.绘制多边形drawPolygon(intxPoints[],intyPoints[],intnPoints)绘制多边形。fillPolygon(intxPoints[],intyPoints[],intnPoints)填充多边形。参数数组xPoint和yPoint组成多边形的顶点坐标,nPoints是顶点的数目。下面的例子7绘制了一些基本图形返回12.7JavaApplet中绘制图像图像是矩形内的一组像素。需要指出的是,Java支持两种主要的图像格式:GIF(GraphicsInterchangFormat)、JPEG(JoinPhtographicExpertGroup)。Applet类提供了一个重要的方法:publicImagegetImage(URLurl,Stringname)这个方法返回可以被显示在屏幕上的Image对象的引用,即将URL地址中,文件名为name的文件加载的内存,并返回该内存的首地址。有时我们想加载JavaApplet程序所在的服务器上的图像,那就必须要提供图像文件所在的URL的目录,例如:运行JavaApplet的URL所指的目录是:。如果JavaApplet准备显示java目录中的图像,可以让JavaApplet调用从Applet继承的方法:publicURLgetCodeBase(),该方法返回一个URL对象,该对象包含JavaApplet所在的目录,例如,返回的URL对象含有的信息:。返回Applet还有一个类似的方法:publicURLgetDocumentBase(),该方法返回一个URL对象,该对象是嵌入JavaApplet的网页的URL,例如,返回的URL对象含有的信息:。学会使用下面的最基本的drawImage()方法,您可以很容易地使用另外的几个方法。publicbooleandrawImage(Imageimg,intx,inty,ImageObserverobserver):参数img是被绘制的Image对象;x,y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。由于Applet类已经实现了ImageObserver接口,因此它可以作为加