Chapter19网页的向导-Appletweb服务器网页与applet一起被下载到用户计算机里运行向web服务器要求传送网页用户计算机applet经编译后,会产生.class的文件。把.class的文件嵌在html的网页中,只要用户连到一个网页里,applet便会随着网页下载到用户的计算机运行Java的程序可分为Javaapplication与Javaapplet两种。本章将介绍Javaapplet的编写与它的运行方式。java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Paneljava.applet.AppletApplet类的继承关系:01//App19_2,简单的applet程序02importjava.awt.*;03importjava.applet.Applet;0405publicclassApp19_2extendsApplet{06publicvoidpaint(Graphicsg)07{08g.drawString(HelloJava,30,50);//在绘图区内写上字符串09}10}引入Applet包准备一个HTML文件App19_2.htm,并将它放在与App19_2.class同一个文件夹内。01!--App19_2.htm--02HTML03BODYBGCOLOR=FFFF0004APPLET05CODE=App19_2.class06WIDTH=24007HEIGHT=17008ALT=很抱歉,您的浏览器不支持Javaapplet09ALIGN=RIGHT10VSPACE=2011/APPLET12/BODY13/HTML设置applet靠右对齐设置applet与其他组件的垂直距离为20用浏览器来观看applet的运行结果用appletviewer查看运行的结果传递参数给appletapplet可通过HTML使用参数,从含有APPLET标签的HTML文件中获得不同的输入。从HTML中合理地使用参数,既可以控制对applet的执行,也可以增加applet的灵活性,不致于因简单的修改而对整个java源程序重新编译。为了在一个applet中建立和处理参数,必须:1、在HTML文件中设置一个特殊的参数标志;2、在applet中从语法上分析这些参数的代码。在包含嵌入applet的HTML文件中使用PARAM标签表示每个参数,PARAM标签具有名字和值两个属性,其分别称为NAME和VALUE。一、形式:●在HTML文件中:appletcode=….classwidth=…height=…paramname=myParavalue=”…”paramname=参数名value=”参数值”/applet在applet文件中,可以在init()方法中用getParameter(“myPara”)方法获得这些参数。getParameter()方法的语法:String保存参数值的变量=getParameter(“参数名”);getParameter()方法有一个参数,返回包含对应该参数值的一个字符串。例如:StringtheFontName=getParameter(“font”);二、注意1、作为在PARAM中指定的参数名,和在getParameter()的参数名必须完全匹配;2、如果用户没有在HTML文件中指定所需的参数,getParameter()就返回null。用户层次需要测试一个null参数,并提供一个适当的缺省。例如:if(theFontName==null)theFontName=”Courier”;三、例子importjava.awt.*;importjava.applet.*;publicclassAppletofParamextendsApplet{privateStringparamName;//保存返回对应参数值的字符串publicvoidinit(){paramName=getParameter(“who”);if(paramName==null){paramName=”world”;}}publicvoidpaint(Graphicsg){super.paint(g);g.drawString(“Hello”+paramName+“!”,50,50);}}程序对应的HTML文件:HTMLHEADTITLEThisistheexampleofParametrtransfer/TITLE/HEADBODYappletcode=AppletofParam.classheight=250width=400paramname=whovalue=Jessica/applet/BODY/HTML请注意applet文件和HTML文件中红色的对应paramName=getParameter(“who”);paramname=whovalue=Jessica三、例子importjava.awt.*;importjava.applet.*;publicclassAppletofParamextendsApplet{privateStringparamName;//paramName用来保存返回对应参数值的字符串publicvoidinit(){paramName=getParameter(“who”);01//App19_3,简单的applet程序02importjava.awt.*;03importjava.applet.Applet;0405publicclassApp19_3extendsApplet{06publicvoidpaint(Graphicsg)07{08g.drawString(getParameter(str1),30,40);//取得html里的str1串09g.drawString(getParameter(str2),30,60);//取得html里的str2串…………09PARAMNAME=str1VALUE=HellofromJava!!10PARAMNAME=str2VALUE=Sayhellotoyou!!11/APPLET12/BODY13/HTML直接通过函数获得HTML中的参数HTML文件09PARAMNAME=str1VALUE=HellofromJava!!10PARAMNAME=str2VALUE=Sayhellotoyou!!JAVA文件08g.drawString(getParameter(str1),30,40);//取得html里的str1字符串09g.drawString(getParameter(str2),30,60);//取得html里的str2字符串显示效果Applet的运行程序当屏幕需要更新以显示新的内容,窗口通过制作必须更新的区域(矩形)来处理,然后画出显示的结果。由update()和paint()方法完成。update()方法:取Graphics类对象作为参数。当applet区域需要重画时,Windows系统开始画画过程。调用update()方法清除屏幕再调用paint()方法,屏幕然后由系统更新。paint()方法:取Graphics类对象作参数,在绘画区画applet的图象。方法被第一次自动激活时,applet显示在屏幕上而且每次applet收到焦点,由调用repaint()方法而触发paint()方法。repaint()方法:当想要重画applet的区域时调用该方法。repaint()方法是调用update()方法发出applet需要更新的信号。update()方法的缺省操作是清除applet区域和调用paint()方法,如果不想清除applet区域可以抑制update()方法。init()init()start()start()stop()stop()destroy()destroy()stop()stop()进入网页或按重新整理(reload)按钮程序开始执行关闭applet回到本页跳到别页设定初值销毁applet例子:importjava.applet.*;importjava.awt.*;publicclassAppletMethodsextendsApplet{intinitCounter=0;intstartCounter=0;intstopCounter=0;intdestroyCounter=0;publicvoidinit(){initCounter++;repaint();}publicvoidstart(){startCounter++;repaint();}publicvoidstop(){stopCounter++;repaint();}publicvoiddestroy(){destroyCounter++;repaint();}publicvoidpaint(Graphicsg){g.drawString(inithasbeeninvoked“+String.valueOf(initCounter)+times,20,20);g.drawString(starthasbeeninvoked“+String.valueOf(startCounter)+times,20,35);g.drawString(stophasbeeninvoked“+String.valueOf(stopCounter)+times,20,50);g.drawString(destroyhasbeeninvoked“+String.valueOf(destroyCounter)+times,20,65);}}加入AWT组件到applet里创建组件的对象将创建好的对象加入到Applet窗口里若要实现组件的功能,还需为其添加监视器和写相应的代码//例:加入AWT组件到applet里08Buttonbtn;//声明Button类型的变量btn09publicvoidinit()10{11btn=newButton(Start);//创建btn对象12btn.addActionListener(this);//applet本身作btn的聆听者13add(btn);//将btn按钮加入applet窗口里14}15publicvoidactionPerformed(ActionEvente)16{17if(btn.getLabel()==Start)18btn.setLabel(Stop);//设置按钮上方的文字为Stop19else20btn.setLabel(Start);//设置按钮上方的文字为Start21}实现接口中的方法,以使得控件能够响应用户事件以上代码以实现程序所要求的该控件的功能加载与显示影像声明Image类型的变量利用getImage()加载图片利用drawImage()绘出图片在applet里除了可以绘制图形外,也可以加载图片(即影像)。加载与显示图片的操作相当简单,只要下列三个操作就可以了://例://以下只给出三个主要操作08Imageimg;//声明Image类型的变量img0910publicvoidinit()11{12img=getImage(getCodeBase(),baby.jpg);//加载baby.jpg图片13}//其中baby.jpg文件应该与此class文件处于相同文件夹下1415publicvoidpaint(Graphicsg)16{17g.drawImage(img,20,20,this);//将img画在applet上18}App19_8.java只有短短的19行便可用来加载影像第8行声明Image类型的变量img第12行利用getImage(getCodeBase(),baby.jpg)来加载图片baby.jpg其中getCodeBase(