《JAVAapplet应用实例.ppt》由会员分享,可在线阅读,更多相关《JAVAapplet应用实例.ppt(39页珍藏版)》请在三一办公上搜索。
1、Chapter 19,网页的向导-Applet,applet经编译后,会产生.class的文件。把.class的文件嵌在html的网页中,只要用户连到一个网页里,applet便会随着网页下载到用户的计算机运行,Java的程序可分为Java application与Java applet两种。本章将介绍Java applet的编写与它的运行方式。,Applet类的继承关系:,01/App19_2,简单的applet程序02 import java.awt.*;03 import java.applet.Applet;04 05 public class App19_2 extends Apple
2、t 06 public void paint(Graphics g)07 08 g.drawString(Hello Java,30,50);/在绘图区内写上字符串09 10,引入Applet包,准备一个HTML文件App19_2.htm,并将它放在与App19_2.class同一个文件夹内。,01 02 03 04 11 12 13,设置applet靠右对齐,设置applet与其他组件的垂直距离为20,用浏览器来观看applet的运行结果,用appletviewer查看运行的结果,传递参数给appletapplet可通过HTML使用参数,从含有标签的HTML文件中获得不同的输入。从HTML中
3、合理地使用参数,既可以控制对applet的执行,也可以增加applet的灵活性,不致于因简单的修改而对整个java源程序重新编译。为了在一个applet中建立和处理参数,必须:1、在HTML文件中设置一个特殊的参数标志;,2、在applet中从语法上分析这些参数的代码。在包含嵌入applet 的HTML文件中使用 标签表示每个参数,标签具有名字和值两个属性,其分别称为NAME和VALUE。一、形式:在HTML文件中:,在applet文件中,可以在init()方法中用getParameter(“myPara”)方法获得这些参数。getParameter()方法的语法:String 保存参数值的变
4、量=getParameter(“参数名”);getParameter()方法有一个参数,返回包含对应该参数值的一个字符串。例如:String theFontName=getParameter(“font”);,二、注意1、作为在中指定的参数名,和在getParameter()的参数名必须完全匹配;2、如果用户没有在HTML文件中指定所需的参数,getParameter()就返回null。用户层次需要测试一个null参数,并提供一个适当的缺省。例如:if(theFontName=null)theFontName=”Courier”;,三、例子import java.awt.*;import ja
5、va.applet.*;public class AppletofParam extends Applet private String paramName;/保存返回对应参数值的字符串 public void init()paramName=getParameter(“who”);if(paramName=null)paramName=”world”;public void paint(Graphics g)super.paint(g);g.drawString(“Hello”+paramName+“!”,50,50);,程序对应的HTML文件:This is the example of
6、Parametr transfer,请注意applet文件和 HTML文件中红色的对应paramName=getParameter(“who”);,三、例子import java.awt.*;import java.applet.*;public class AppletofParam extends Applet private String paramName;/paramName用来保存返回对应参数值的字符串 public void init()paramName=getParameter(“who”);,01/App19_3,简单的applet程序02 import java.awt.
7、*;03 import java.applet.Applet;04 05 public class App19_3 extends Applet 06 public void paint(Graphics g)07 08 g.drawString(getParameter(str1),30,40);/取得html里的str1串09 g.drawString(getParameter(str2),30,60);/取得html里的str2串09 10 11 12 13,直接通过函数获得HTML中的参数,09 10,08 g.drawString(getParameter(str1),30,40);
8、/取得html里的str1字符串09 g.drawString(getParameter(str2),30,60);/取得html里的str2字符串,显示效果,Applet的运行程序 当屏幕需要更新以显示新的内容,窗口通过制作必须更新的区域(矩形)来处理,然后画出显示的结果。由update()和paint()方法完成。update()方法:取Graphics类对象作为参数。当applet区域需要重画时,Windows系统开始画画过程。调用update()方法清除屏幕再调用paint()方法,屏幕然后由系统更新。,paint()方法:取Graphics类对象作参数,在绘画区画applet的图象。
9、方法被第一次自动激活时,applet显示在屏幕上而且每次applet收到焦点,由调用repaint()方法而触发paint()方法。repaint()方法:当想要重画applet的区域时调用该方法。repaint()方法是调用update()方法发出applet需要更新的信号。update()方法的缺省操作是清除applet区域和调用paint()方法,如果不想清除applet区域可以抑制update()方法。,例子:import java.applet.*;import java.awt.*;public class AppletMethods extends Applet int init
10、Counter=0;int startCounter=0;int stopCounter=0;int destroyCounter=0;public void init()initCounter+;repaint();public void start()startCounter+;repaint();public void stop()stopCounter+;repaint();,public void destroy()destroyCounter+;repaint();public void paint(Graphics g)g.drawString(init has been inv
11、oked“+String.valueOf(initCounter)+times,20,20);g.drawString(start has been invoked“+String.valueOf(startCounter)+times,20,35);g.drawString(stop has been invoked“+String.valueOf(stopCounter)+times,20,50);g.drawString(destroy has been invoked“+String.valueOf(destroyCounter)+times,20,65);,加入AWT组件到apple
12、t里,创建组件的对象将创建好的对象加入到Applet窗口里若要实现组件的功能,还需为其添加监视器和写相应的代码,/例:加入AWT组件到applet里 08 Button btn;/声明Button类型的变量btn09 public void init()10 11 btn=new Button(Start);/创建btn对象12 btn.addActionListener(this);/applet本身作btn的聆听者13 add(btn);/将btn按钮加入applet窗口里14,15 public void actionPerformed(ActionEvent e)16 17 if(bt
13、n.getLabel()=Start)18 btn.setLabel(Stop);/设置按钮上方的文字为Stop19 else20 btn.setLabel(Start);/设置按钮上方的文字为Start21,实现接口中的方法,以使得控件能够响应用户事件,以上代码以实现程序所要求的该控件的功能,加载与显示影像,声明Image类型的变量 利用getImage()加载图片利用drawImage()绘出图片,在applet里除了可以绘制图形外,也可以加载图片(即影像)。加载与显示图片的操作相当简单,只要下列三个操作就可以了:,/例:/以下只给出三个主要操作08 Image img;/声明Image类
14、型的变量img09 10 public void init()11 12 img=getImage(getCodeBase(),baby.jpg);/加载baby.jpg图片13/其中baby.jpg文件应该与此class文件处于相同文件夹下14 15 public void paint(Graphics g)16 17 g.drawImage(img,20,20,this);/将img画在applet上18,App19_8.java只有短短的19行便可用来加载影像第8行声明Image类型的变量img 第12行利用getImage(getCodeBase(),baby.jpg)来加载图片bab
15、y.jpg 其中getCodeBase()是用来取得applet程序所在的目录 因此在本例中,baby.jpg与App19_8.class必须置于同一个目录下才能运行 getImage()命令编写在init()方法中,因此只要applet一运行,baby.jpg便会自动加载。,对于 paint()方法,利用第17行的语句:drawImage(img,20,20,this)把img加载,并把图形的左上角置于(20,20)之处。此外,第17行的this关键字代表图片所显示的区域为目前的这个applet。如果要限定加载后,图形的宽度为w个像素,高度为h个像素,则可以把第17行改写成:g.drawIm
16、age(img,20,20,w,h,this);/限定加载图形的宽为w,高h个像素 此时原图会依设置的w与h做缩放的操作。,移动影像,前一章用鼠标移动了圆形,现在利用相同的原理,也可以很容易地写出移动影像的程序代码。App19_9是利用相同的原理来移动一只加载的黄金鼠影像,如下是此例的代码:,01/App19_9,在applet里移动图片02 import java.awt.*;03 import java.awt.event.*;04 import java.applet.Applet;05 06 public class App19_9 extends Applet implements
17、MouseMotionListener,MouseListener07 08 Image img;/声明Image类型的变量img09 int x=70,y=60,posX=70,posY=60,dx,dy;10,/init()方法初始化applet11 public void init()12 13 img=getImage(getCodeBase(),mouse.gif);/加载影像14 addMouseListener(this);15 addMouseMotionListener(this);16 17 public void mousePressed(MouseEvent e)18
18、19 dx=e.getX()-posX;/取得按下点与基准点x方向的距离20 dy=e.getY()-posY;/取得按下点与基准点y方向的距离21,/鼠标拖拽事件处理22 public void mouseDragged(MouseEvent e)23 24 x=e.getX()-dx;/取得拖曳时基准点的x坐标25 y=e.getY()-dy;/取得拖曳时基准点的y坐标26 if(dx0/清空画面为背景颜色,再调用paint()30 31,/paint()方法处理32 public void paint(Graphics g)33 34 g.drawImage(img,x,y,120,60
19、,this);/将img画在applet上35 posX=x;/更新基准点的x坐标36 posY=y;/更新基准点的y坐标37 38 public void mouseMoved(MouseEvent e);39 public void mouseReleased(MouseEvent e);40 public void mouseEntered(MouseEvent e);41 public void mouseExited(MouseEvent e);42 public void mouseClicked(MouseEvent e);43,/调用applet的html页01 02 03 0
20、4 08 09 10,播放音乐文件,除了可以在applet的窗口内显示图片之外,也可以在applet内播放音乐!在applet内播放音乐非常的简单,只要利用java.applet类库里的AudioClip接口就可以了,AudioClip接口定义了三个简单的方法,分别为loop()、play()与stop(),其功能列表如下所示。表19-3 java.applet.AudioClip的方法,01/App19_10,在applet播放音乐文件/引用需要的包注意02 import java.awt.*;03 import java.awt.event.*;04 import java.applet.
21、Applet;05 import java.applet.AudioClip;,目前Java J2SE 1.4版所支持的声音文件已相当的齐全,且目前的浏览器也可播放au、wav与midi等类型的文件。下面是一个用APPLET实现的播放音乐文件的例子。,06/定义类并进行必要的变量设置07 public class App19_10 extends Applet implements ItemListener08 09 AudioClip midi=new AudioClip3;/声明AudioClip接口类型的数组10 AudioClip current;/声明AudioClip接口类型的变量
22、current11 12 Choice chc=new Choice();/创建Choice组件 加载三个声音文件,并把它们设置给midi数组13,/INIT()方法,进行必要的初始化工作14 public void init()15/加载声音文件,并把它们放入midi数组中16 midi0=getAudioClip(getCodeBase(),Totoro.midi);17 midi1=getAudioClip(getCodeBase(),UnderTheSea.midi);18 midi2=getAudioClip(getCodeBase(),LionKing.midi);/在选择控件中添
23、加要播放的文件名称如下19 chc.add(龙猫);20 chc.add(小美人鱼);21 chc.add(狮子王);22 add(chc);/将选择控件添加到APPLET上/把applet当成chc的聆听者,及监视器23 chc.addItemListener(this);24 current=midi0;/设置目前播放的歌曲为midi025 current.play();/播放歌曲26,27/处理选择控件的选择事件28 public void itemStateChanged(ItemEvent e)29 30 current.stop();/停止播放歌曲/取得被选取的索引值31 int
24、index=chc.getSelectedIndex();/设置播放的歌曲为midiindex32 current=midiindex;33 current.play();/播放歌曲34 35,程序说明:,第9行声明了AudioClip接口类型的数组midi,数组元素为3个。第10行声明了另一个AudioClip接口类型的变量current,用来记录目前正在播放的歌曲。第1618行利用getAudioClip()方法加载声音文件,并把它们设置给midi数组的元素。第1921将歌曲名称加入下拉菜单中第23行设置applet本身为下拉菜单的聆听者第24行指明了目前播放的歌曲为midi0在第25行开始播放。,当下拉菜单里的项目被选取时,第2834行的itemStateChanged()方法会被运行。第30行先停止目前正在播放的歌曲第31行取得下拉菜单里被选取的索引值第32行依此索引值设置目前播放的歌曲为midiindex最后第36行开始播放。值得一提的是,AudioClip具有混声的功能,即可以同时播放好几个声音文件。因此在本例中,须先停止目前正在播放的歌曲才能再播放其他歌曲,否则会有两个以上的歌曲一起播放的情形。,