Java程序设计实用教程-第9章-javaapplet程序_第1页
Java程序设计实用教程-第9章-javaapplet程序_第2页
Java程序设计实用教程-第9章-javaapplet程序_第3页
Java程序设计实用教程-第9章-javaapplet程序_第4页
Java程序设计实用教程-第9章-javaapplet程序_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第9章Applet程序9.1Applet简介

9.1.1Applet说明1.查看方法:支持Java的Web浏览器appletviewer2.显示AppletApplet是一种特殊的Java程序,它不能独立运行。编译器将Applet源程序编译成Java字节码(Byte-Code)后,在网页中加载的是Java字节码。在网络上如果查看包含Java字节码的网页,则Web服务器将编译好的Java字节码送至客户端的浏览器中执行,32.显示Applet43.Applet工作原理9.1.2Applet的形式及其类的层次Applet格式:importjava.applet.Applet;publicclassExample9_1extendsApplet{ ……}Applet类位于java.applet包,它继承于java.awt.Panel类,继承关系的层次如下图:Applet继承关系的层次图79.2.1Applet生命周期9.2JavaApplet的生命周期和显示方法8(1)init():当applet首次被调用时执行.包括:创建对象,载入图形,字体,设置参数等.(2)start():applet初始化后开始生命周期时执行.包括开始线程,给辅助对象发送消息等,可执行多次.(3)stop():在默认情况下,当离开WEB页时,applet将继续执行,并占用系统资源.调用stop()方法后,终止其执行.再次回到该页面时,重新调用start(),启动applet(4)destroy()方法:当Applet程序全部执行完了,或是结束浏览器时,该方法被调用,用来终止Applet的生命周期;(5)paint():在页面上画图.一般用repaint()重载paint(),实现图形的刷新.(6)update()方法:用于更新Applet容器,刷新图形.(9)repaint()方法:当使用该方法时,程序会调用update方法清除paint()方法之前所画的内容,之后再次调用paint()方法重画Applet界面.9.2.2applet的主要方法paint()、update()和repaint()方法之间的关系10importjava.applet.*;publicclass类名extendsApplet{定义成员变量;publicvoidinit(){……}publicvoidstart(){……}publicvoidstop(){……}publicvoidpaint(graphicsg){……}定义其它方法;}9.2.3applet的结构11例9-1基本的applet程序importjava.awt.Graphics;importjavax.swing.JApplet;publicclassExample9_1extendsJApplet{ publicvoidpaint(Graphicsg){ g.drawString("Helloapplet!",50,60); }}Example9_1.html文件<html><appletcode=“Example9_1.class”width=250height=90></applet></html>12例9-2覆盖init()方法的applet程序importjava.awt.Graphics;importjavax.swing.JApplet;importjavax.swing.*;publicclassExample9_2extendsJApplet{ intn; longs=1; publicvoidinit(){ StringnStr=JOptionPane.showInputDialog("请输入一个正整数"); n=Integer.parseInt(nStr); for(inti=1;i<=n;i++) s=s*i; } publicvoidpaint(Graphicsg){ g.drawRect(40,30,150,55); g.drawString(n+"!="+s,60,50); }}13例9-3Applet举例importjava.applet.*;importjava.awt.*;publicclassExample9_3extendsApplet{ Buttonbutton1,button2; intsum; publicvoidinit(){ button1=newButton("yes"); button2=newButton("No"); add(button1); add(button2);}14publicvoidstart(){ sum=0; for(inti=1;i<=90;i++) sum=sum+i;}publicvoidpaint(Graphicsg){g.setColor(Color.blue);g.drawString("程序设计方法",20,60);g.setColor(Color.red);g.drawString("sum="+sum,20,90);}}15(1)HTML中<paramname=参数名value=参数值>例: <appletcode=类名width=950height=80> <paramname=title_msgvalue=“现在时刻”> </applet>(2)applet中用getParameter方法获取参数例: title=getParameter(“title_msg”);9.3

Applet的参数传递16例9-4Applet接受参数importjava.awt.*;importjava.applet.*;publicclassExample9_4extendsApplet{intx,y,sum;publicvoidinit(){Strings1=getParameter("girl");//从html得到"girl"的值。

Strings2=getParameter("boy");//从html得到"boy"的值。

x=Integer.parseInt(s1);y=Integer.parseInt(s2);sum=x+y;}publicvoidpaint(Graphicsg){g.drawString("sum="+sum,90,120);}}17相应的HTML文件的内容为:<appletcode=Example9_3.classwidth=200height=200><Paramname="girl"value="160"><Paramname="boy"value="175"></applet>189.4在Applet中使用图形、字体和颜色9.4.1使用图形:Graphics类Graphics类中常用的两种属性:Color和FontGraphics类的常用方法方法说明ColorgetColor()返回当前颜色voidsetColor(Colorc)用指定色来设置当前颜色FontgetFont()返回当前字体voidsetFont(Fontfont)用指定字体来设置当前字体drawString(Stringstr,intx,inty)用当前颜色和字体在指定位置上显示一个字符串drawLine、drawRect、drawOval画线、矩形、椭圆fillRext、fillOval画实矩形、实椭圆19paint()方法和repaint()方法paint()方法是每个Applet必不可少的一部分,是Applet进行所有绘制的场所。当在Applet窗口中要显示或重新显示任何事务时,必须调用paint方法。 publicvoidpaint(Graphicsg){……}repaint()方法:用来强制执行paint()方法,刷新窗口。20例9-5绘制图形importjava.awt.Graphics;importjavax.swing.JApplet;publicclassPaintextendsJApplet{ publicvoidpaint(Graphicsg){ g.drawLine(40,30,200,30); g.drawRect(40,50,160,150); g.drawOval(45,55,150,140); g.drawLine(40,220,200,220); g.drawString("Drawing",90,130); }}219.4.2使用字体:Font类使用Font类可以获得丰富多彩和精确逼真的字体显示效果。方法说明StringgetName()返回当前字体的名字intgetStyle()返回当前字体的风格intgetSize()返回当前字体的大小构造方法:publicFont(Stringname,intstyle,intsize)229.4.3使用颜色:Color类方法一:使用颜色常量格式:类名.常量名例:setBackground(Color.blue)方法二:指定颜色的RGB值或HSB值常用构造方法:publicColor(intr,intg,intb)红、绿、蓝的取值范围:0~255其他常用方法:publicvoidsetForeground(ColorcpublicColorgetForeground() publicvoidsetBackground(Colorc) publicColorgetBackground() 23importjava.applet.*;importjava.awt.*;importjava.util.*;publicclassL9_6extendsApplet{Datenowdate;publicvoidinit(){

nowdate=newDate();

setBackground(Color.yellow);} publicvoidpaint(Graphicsg){ g.setColor(Color.red);

g.setFont(newFont("Courier",Font.ITALIC,36));

g.drawString(nowdate.toString(),30,50);}}例9-6:时钟applet24例9_7编写一个Applet程序,包含3个标签,其前景色分别为青、绿蓝三色。importjava.applet.Applet;importjava.awt.*;importjavax.swing.*; PublicclassAppletLabelextendsApplet{ JLabellabel1;JLabellabel2;JLabellabel3; publicvoidinit(){ label1=newJLabel("Seeyoulater."); label1.setForeground(Color.cyan); label2=newJLabel("Howareyou?"); label2.setForeground(Color.green); label3=newJLabel("Howdoyoudo?"); label3.setForeground(Color.blue); setLayout(newgridLayout(0,1)); add(label1);add(label2);add(label3); }}25例9_8画五环importjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassYuanHuanextendsAppletimplementsActionListener{ intX[]=newint[5]; intY[]=newint[5]; intR[]=newint[5]; intH[]=newint[5]; intcount=0; LabellblX=newLabel("X="); TextFieldx=newTextField(2); LabellblY=newLabel("Y="); TextFieldy=newTextField(2); LabellblR=newLabel("R="); TextFieldr=newTextField(2); LabellblH=newLabel("厚度="); TextFieldh=newTextField(2); Buttonbtn=newButton("绘制"); publicvoidinit(){ add(lblX);add(x);add(lblY);add(y);add(lblR);add(r);add(lblH);add(h);add(btn); btn.addActionListener(this); }26publicvoidactionPerformed(ActionEvente){ count++; if(count==6)count=1; X[count-1]=Integer.parseInt(x.getText()); Y[count-1]=Integer.parseInt(y.getText()); R[count-1]=Integer.parseInt(r.getText()); H[count-1]=Integer.parseInt(h.getText()); repaint(); } publicvoidpaint(Graphicsg){ for(inti=0;i<5;i++){ g.setColor(Color.blue); g.fillOval(X[i]-R[i],Y[i]-R[i],R[i]*2,R[i]*2); g.setColor(Color.black); g.drawOval(X[i]-R[i],Y[i]-R[i],R[i]*2,R[i]*2); g.setColor(Color.white); g.fillOval(X[i]-R[i]+H[i],Y[i]-R[i]+H[i],(R[i]-H[i])*2,(R[i]-H[i])*2); g.setColor(Color.black); g.drawOval(X[i]-R[i]+H[i],Y[i]-R[i]+H[i],(R[i]-H[i])*2,(R[i]-H[i])*2); } }}27运行结果289.5多媒体9.5.1使用图像1、要使用图像得用Image类,它是所有表现图像的类的超类。2、Image类由publicabstract修饰。3、加载图像的方法:publicImagegetImage(URLurl)publicImagegetImage(URLurl,Stringname)例:Imageimg=getImage(newURL(/test/images/bird.gif));Imageimg=getImage(newURL(/test"),"images/bird.gif");29Graphics类提供了一个drawImage()方法,它能完成将Image对象中的图像显示在屏幕的特定位置上,就象显示文本一样方便。drawImage()方法的调用格式如下:

booleandrawImage(Imageimg,intx,inty,ImageObserverobserver)

其中img参数就是要显示的Image对象。x和y参数是该图像左上角的坐标值。observer参数则是一个ImageObserver接口(interface),它用来跟踪图像文件装载是否已经完成的情况,通常我们都将该参数置为this,即传递本对象的引用去实现这个接口。booleandrawImage(Imageimg,intx,inty,intwidth,intheight,ImageObserverobserver)

width和height,即表示图像显示的宽度和高度4、drawImage()方法30importjava.awt.Graphics;importjava.awt.Image;publicclassExample9_9extendsjava.applet.Applet{Imageimg;publicvoidinit(){img=getImage(getCodeBase(),"boy.gif");}

例9_9图片的显示31publicvoidpaint(Graphicsg){intw=img.getWidth(this);inth=img.getHeight(this); g.drawImage(img,20,9,this);

g.drawImage(img,200,9,w/2,h/2,this);

g.drawImage(img,20,200,w*2,h/3,this);

g.drawImage(img,350,9,w/2,h*2,this);

}}325、其他常用方法1)publicURLgetDocumentBase()//返回Applet所在的HTML的URL2)publicURLgetCodeBase()//返回Applet文件(.class)所在网址URLImageimg=getImage(newURL(/test"),"images/bird.gif");Imageimg=getImage(getDocumentBase(),images/bird.gif");当test目录移到别处时,图像文件依然可以被正确装载3)Filefile=newFile("d:\\");Imageimg=getImage(file.toURI().toURL(),"fuya.jpg")33例:publicvoidpaint(Graphicsg){ drawImage(img,0,0,this); }作用:在指定的位置上显示图像方法说明getWidth返回宽度getHeight返回高度getProperty返回图像属性Flush释放当前图像占用的所有资源34例9_10图片的显示(参数传递)importjava.applet.Applet;importjava.awt.Graphics;importjava.awt.Image;publicclassExample9_10extendsApplet{ Imageimg; publicvoidinit(){ img=getImage(getDocumentBase(),getParameter("image")); } publicvoidpaint(Graphicsg){ g.drawImage(img,0,0,this); }}<appletcode=SimpleImageLoaderApplet.classwidth=200height=160><paramname="image"value="neo.png"></applet>359.5.2使用声音1、Java支持下列格式的声音文件:AIFF,AU,WAV,MIDI和RMF2、

获得声音文件

AudioClipgetAudioClip(URLurl)AudioClipgetAudioClip(URLurl,Stringname)3、声音文件的播放

java.applet.AudioClip接口,可同时播放多个AudioClip对象,播放方法:

voidplay(URLurl)voidplay(URLurl,Stringname)loop()方法重复播放

stop()方法结束放音36importjava.applet.*;publicclassTestaudioextendsApplet{AudioClipbg_sound1,bg_sound2;//定义声音对象实体

publicvoidinit(){ bg_sound1=getAudioClip(getCodeBase(),"test.wav");//gettheAudioClipitem1 bg_sound2=getAudioClip(getCodeBase(),"sound1.wav");//gettheAudioClipitem2}publicvoidstart(){ bg_sound1.play(); bg_sound2.loop(); }}例9_11声音播放37importjava.applet.AudioClip;publicclassL9_12extendsjava.applet.Applet{AudioClipbgmusic,speak;publicvoidinit(){bgmusic=getAudioClip(getDocumentBase(),"computer.au");speak=getAudioClip(getDocumentBase(),"spacemusic.au");}publicvoidstart(){if(bgmusic!=null)bgmusic.loop();if(speak!=null)speak.play();}publicvoidstop(){if(bgmusic!=null)bgmusic.stop();}}//关闭背景音乐例9_12声音文件的播放实例二389.5.3动画效果的实现1、动画的实现Java中实现动画的原理很简单,就是使用帧动画技术。也就是先把图像加载,每一幅图像都是一帧,在屏幕上显示动画的第一帧(也就是第一幅画面),然后每隔很短的时间再显示另外一帧,如此往复。由于人眼的视觉暂停而感觉好象画面中的物体在运动。39当用paint()方法在屏幕上画好一帧画面时,再用鼠标拖动这个窗口或用其他窗口覆盖它,再移开时,这帧画面并未被破坏,而是很快地就被重新画好了。其实,系统是去调用repaint()方法来完成重画任务,而repaint()方法又去直接调用了update()方法,update()方法则先清除整个Applet区域里的内容,然后再调用paint()方法,从而完成了一次重画工作。40paint()与update()某组件的paint()和

update()为系统自动调用的有关图形绘制的方法,不可人为编程调用;但可编程重新定义其操作内容使用repaint()方法可以触发update()方法paint()当某些操作破坏了显示,需重新绘制时第一次绘制repaint()编程控制1.擦除并填充成背景色2.调用paint()update()调用41使用两个线程,一个是原来的程序,另一个用来处理执行无穷循环的部分.(1)定义Applet类,实现Runnable接口publicclass...extendsAppletimplementsRunnable{(2)init()方法------不改变(3)start()方法中,创建一个动画线程并启动

publicvoidstart(){if(runner==null);{runner=newThread(this); //newThreadrunner.start();}}例9_13用线程实现动画42(4)stop()方法,停止线程

publicvoidstop(){if(runner!=null){//runner.stop();runner=null;}}(5)run()方法,控制动画循环。每次循环,调用repaint(),重绘刷新.publicvoidrun(){while(Thread.currentThread()==runner){ //帧号或其他标志变量变化

repaint();}43(6)paint()方法publicvoidpaint(Graphicsg){//根据帧号或其他标志变量变化绘制

}44importjava.awt.*;importjava.applet.*;publicclassdonghuawordextendsAppletimplementsRunnable{ publicThreadrunner; publicintxpos; publicvoidinit(){ xpos=600; setBackground(Color.white); } publicvoidstart(){ if(runner==null);{ runner=newThread(this); //newThread runner.start(); } }45

publicvoidstop(){ if(runner!=null){ //runner.stop(); runner=null; } } publicvoidrun(){ while(Thread.currentThread()==runner){ xpos=xpos-9; if(xpos==20) xpos=600; repaint(); try{ Thread.sleep(200); }catch(InterruptedExceptione){} } }46publicvoidpaint(Graphicsg){ g.setColor(Color.white); g.fillRect(xpos,9,200,150); g.setColor(Color.red); g.setFont(newFont("TimesRoman",Font.BOLD,48)); g.drawString("Hello!",xpos,60);}publicvoidupdate(Graphicsg){paint(g);}}47例9_14动画示例importjava.awt.*;importjava.applet.*;publicclassdonghuaimageextendsAppletimplementsRunnable{ Imageduke[]; publicThreadrunner; publicintduke_i=0; publicvoidinit(){ inti=1; duke=newImage[5]; for(i=1;i<duke.length;i++) duke[i]=getImage(getCodeBase(),i+".gif"); } publicvoidstart(){ if(runner==null);{ runner=newThread(this); runner.start(); } }48 publicvoidstop(){ if(runner!=null){ runner=null; } } publicvoidrun(){ while(Thread.currentThread()==runner){ repaint(); try{Thread.sleep(500); } catch(InterruptedExceptione){} duke_i=(duke_i+1)%duke.length; } } publicvoidpaint(Graphicsg){ g.drawImage(duke[duke_i],0,0,this);}}49例题示范:动画的实现50例9_15编写一个JApplet程序,以鼠标的当前位置为交叉点画一个十字且在交叉点处显示鼠标的当前位置;当鼠标移动时,十字随着鼠标的移动而移动。importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassMoveMouseextendsJApplet{ intx,y,d=90; booleanflag=false; Containerpanel; publicvoidinit(){ panel=getContentPane(); panel.addMouseMotionListener(newMouseMotionHandler());} publicvoidpaint(Graphicsg){ if(flag){ g.clearRect(0,0,panel.getWidth(),panel.getHeight()); g.drawString("(x="+x+",y="+y+")",x,y); g.drawLine(x-d,y,x+d,y); g.drawLine(x,y-d,x,y+d); }

51classMouseMotionHandlerextendsMouseMotionAdapter{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论