Java程序設(shè)計(jì)實(shí)用教程-第9章-javaapplet程序_第1頁(yè)
Java程序設(shè)計(jì)實(shí)用教程-第9章-javaapplet程序_第2頁(yè)
Java程序設(shè)計(jì)實(shí)用教程-第9章-javaapplet程序_第3頁(yè)
Java程序設(shè)計(jì)實(shí)用教程-第9章-javaapplet程序_第4頁(yè)
Java程序設(shè)計(jì)實(shí)用教程-第9章-javaapplet程序_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1第9章Applet程序9.1Applet簡(jiǎn)介

9.1.1Applet說(shuō)明1.查看方法:支持Java的Web瀏覽器appletviewer2.顯示AppletApplet是一種特殊的Java程序,它不能獨(dú)立運(yùn)行。編譯器將Applet源程序編譯成Java字節(jié)碼(Byte-Code)后,在網(wǎng)頁(yè)中加載的是Java字節(jié)碼。在網(wǎng)絡(luò)上如果查看包含Java字節(jié)碼的網(wǎng)頁(yè),則Web服務(wù)器將編譯好的Java字節(jié)碼送至客戶端的瀏覽器中執(zhí)行,32.顯示Applet43.Applet工作原理9.1.2Applet的形式及其類的層次Applet格式:importjava.applet.Applet;publicclassExample9_1extendsApplet{ ……}Applet類位于java.applet包,它繼承于java.awt.Panel類,繼承關(guān)系的層次如下圖:Applet繼承關(guān)系的層次圖79.2.1Applet生命周期9.2JavaApplet的生命周期和顯示方法8(1)init():當(dāng)applet首次被調(diào)用時(shí)執(zhí)行.包括:創(chuàng)建對(duì)象,載入圖形,字體,設(shè)置參數(shù)等.(2)start():applet初始化后開(kāi)始生命周期時(shí)執(zhí)行.包括開(kāi)始線程,給輔助對(duì)象發(fā)送消息等,可執(zhí)行多次.(3)stop():在默認(rèn)情況下,當(dāng)離開(kāi)WEB頁(yè)時(shí),applet將繼續(xù)執(zhí)行,并占用系統(tǒng)資源.調(diào)用stop()方法后,終止其執(zhí)行.再次回到該頁(yè)面時(shí),重新調(diào)用start(),啟動(dòng)applet(4)destroy()方法:當(dāng)Applet程序全部執(zhí)行完了,或是結(jié)束瀏覽器時(shí),該方法被調(diào)用,用來(lái)終止Applet的生命周期;(5)paint():在頁(yè)面上畫(huà)圖.一般用repaint()重載paint(),實(shí)現(xiàn)圖形的刷新.(6)update()方法:用于更新Applet容器,刷新圖形.(9)repaint()方法:當(dāng)使用該方法時(shí),程序會(huì)調(diào)用update方法清除paint()方法之前所畫(huà)的內(nèi)容,之后再次調(diào)用paint()方法重畫(huà)Applet界面.9.2.2applet的主要方法paint()、update()和repaint()方法之間的關(guān)系10importjava.applet.*;publicclass類名extendsApplet{定義成員變量;publicvoidinit(){……}publicvoidstart(){……}publicvoidstop(){……}publicvoidpaint(graphicsg){……}定義其它方法;}9.2.3applet的結(jié)構(gòu)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("請(qǐng)輸入一個(gè)正整數(shù)"); 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("程序設(shè)計(jì)方法",20,60);g.setColor(Color.red);g.drawString("sum="+sum,20,90);}}15(1)HTML中<paramname=參數(shù)名value=參數(shù)值>例: <appletcode=類名width=950height=80> <paramname=title_msgvalue=“現(xiàn)在時(shí)刻”> </applet>(2)applet中用getParameter方法獲取參數(shù)例: title=getParameter(“title_msg”);9.3

Applet的參數(shù)傳遞16例9-4Applet接受參數(shù)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相應(yīng)的HTML文件的內(nèi)容為:<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類的常用方法方法說(shuō)明ColorgetColor()返回當(dāng)前顏色voidsetColor(Colorc)用指定色來(lái)設(shè)置當(dāng)前顏色FontgetFont()返回當(dāng)前字體voidsetFont(Fontfont)用指定字體來(lái)設(shè)置當(dāng)前字體drawString(Stringstr,intx,inty)用當(dāng)前顏色和字體在指定位置上顯示一個(gè)字符串drawLine、drawRect、drawOval畫(huà)線、矩形、橢圓fillRext、fillOval畫(huà)實(shí)矩形、實(shí)橢圓19paint()方法和repaint()方法paint()方法是每個(gè)Applet必不可少的一部分,是Applet進(jìn)行所有繪制的場(chǎng)所。當(dāng)在Applet窗口中要顯示或重新顯示任何事務(wù)時(shí),必須調(diào)用paint方法。 publicvoidpaint(Graphicsg){……}repaint()方法:用來(lái)強(qiáng)制執(zhí)行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類可以獲得豐富多彩和精確逼真的字體顯示效果。方法說(shuō)明StringgetName()返回當(dāng)前字體的名字intgetStyle()返回當(dāng)前字體的風(fēng)格intgetSize()返回當(dāng)前字體的大小構(gòu)造方法:publicFont(Stringname,intstyle,intsize)229.4.3使用顏色:Color類方法一:使用顏色常量格式:類名.常量名例:setBackground(Color.blue)方法二:指定顏色的RGB值或HSB值常用構(gòu)造方法:publicColor(intr,intg,intb)紅、綠、藍(lán)的取值范圍: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:時(shí)鐘applet24例9_7編寫一個(gè)Applet程序,包含3個(gè)標(biāo)簽,其前景色分別為青、綠藍(lán)三色。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畫(huà)五環(huán)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運(yùn)行結(jié)果289.5多媒體9.5.1使用圖像1、要使用圖像得用Image類,它是所有表現(xiàn)圖像的類的超類。2、Image類由publicabstract修飾。3、加載圖像的方法:publicImagegetImage(URLurl)publicImagegetImage(URLurl,Stringname)例:Imageimg=getImage(newURL(/test/images/bird.gif));Imageimg=getImage(newURL(/test"),"images/bird.gif");29Graphics類提供了一個(gè)drawImage()方法,它能完成將Image對(duì)象中的圖像顯示在屏幕的特定位置上,就象顯示文本一樣方便。drawImage()方法的調(diào)用格式如下:

booleandrawImage(Imageimg,intx,inty,ImageObserverobserver)

其中img參數(shù)就是要顯示的Image對(duì)象。x和y參數(shù)是該圖像左上角的坐標(biāo)值。observer參數(shù)則是一個(gè)ImageObserver接口(interface),它用來(lái)跟蹤圖像文件裝載是否已經(jīng)完成的情況,通常我們都將該參數(shù)置為this,即傳遞本對(duì)象的引用去實(shí)現(xiàn)這個(gè)接口。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)所在網(wǎng)址URLImageimg=getImage(newURL(/test"),"images/bird.gif");Imageimg=getImage(getDocumentBase(),images/bird.gif");當(dāng)test目錄移到別處時(shí),圖像文件依然可以被正確裝載3)Filefile=newFile("d:\\");Imageimg=getImage(file.toURI().toURL(),"fuya.jpg")33例:publicvoidpaint(Graphicsg){ drawImage(img,0,0,this); }作用:在指定的位置上顯示圖像方法說(shuō)明getWidth返回寬度getHeight返回高度getProperty返回圖像屬性Flush釋放當(dāng)前圖像占用的所有資源34例9_10圖片的顯示(參數(shù)傳遞)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接口,可同時(shí)播放多個(gè)AudioClip對(duì)象,播放方法:

voidplay(URLurl)voidplay(URLurl,Stringname)loop()方法重復(fù)播放

stop()方法結(jié)束放音36importjava.applet.*;publicclassTestaudioextendsApplet{AudioClipbg_sound1,bg_sound2;//定義聲音對(duì)象實(shí)體

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();}}//關(guān)閉背景音樂(lè)例9_12聲音文件的播放實(shí)例二389.5.3動(dòng)畫(huà)效果的實(shí)現(xiàn)1、動(dòng)畫(huà)的實(shí)現(xiàn)Java中實(shí)現(xiàn)動(dòng)畫(huà)的原理很簡(jiǎn)單,就是使用幀動(dòng)畫(huà)技術(shù)。也就是先把圖像加載,每一幅圖像都是一幀,在屏幕上顯示動(dòng)畫(huà)的第一幀(也就是第一幅畫(huà)面),然后每隔很短的時(shí)間再顯示另外一幀,如此往復(fù)。由于人眼的視覺(jué)暫停而感覺(jué)好象畫(huà)面中的物體在運(yùn)動(dòng)。39當(dāng)用paint()方法在屏幕上畫(huà)好一幀畫(huà)面時(shí),再用鼠標(biāo)拖動(dòng)這個(gè)窗口或用其他窗口覆蓋它,再移開(kāi)時(shí),這幀畫(huà)面并未被破壞,而是很快地就被重新畫(huà)好了。其實(shí),系統(tǒng)是去調(diào)用repaint()方法來(lái)完成重畫(huà)任務(wù),而repaint()方法又去直接調(diào)用了update()方法,update()方法則先清除整個(gè)Applet區(qū)域里的內(nèi)容,然后再調(diào)用paint()方法,從而完成了一次重畫(huà)工作。40paint()與update()某組件的paint()和

update()為系統(tǒng)自動(dòng)調(diào)用的有關(guān)圖形繪制的方法,不可人為編程調(diào)用;但可編程重新定義其操作內(nèi)容使用repaint()方法可以觸發(fā)update()方法paint()當(dāng)某些操作破壞了顯示,需重新繪制時(shí)第一次繪制repaint()編程控制1.擦除并填充成背景色2.調(diào)用paint()update()調(diào)用41使用兩個(gè)線程,一個(gè)是原來(lái)的程序,另一個(gè)用來(lái)處理執(zhí)行無(wú)窮循環(huán)的部分.(1)定義Applet類,實(shí)現(xiàn)Runnable接口publicclass...extendsAppletimplementsRunnable{(2)init()方法------不改變(3)start()方法中,創(chuàng)建一個(gè)動(dòng)畫(huà)線程并啟動(dòng)

publicvoidstart(){if(runner==null);{runner=newThread(this); //newThreadrunner.start();}}例9_13用線程實(shí)現(xiàn)動(dòng)畫(huà)42(4)stop()方法,停止線程

publicvoidstop(){if(runner!=null){//runner.stop();runner=null;}}(5)run()方法,控制動(dòng)畫(huà)循環(huán)。每次循環(huán),調(diào)用repaint(),重繪刷新.publicvoidrun(){while(Thread.currentThread()==runner){ //幀號(hào)或其他標(biāo)志變量變化

repaint();}43(6)paint()方法publicvoidpaint(Graphicsg){//根據(jù)幀號(hào)或其他標(biāo)志變量變化繪制

}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動(dòng)畫(huà)示例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例題示范:動(dòng)畫(huà)的實(shí)現(xiàn)50例9_15編寫一個(gè)JApplet程序,以鼠標(biāo)的當(dāng)前位置為交叉點(diǎn)畫(huà)一個(gè)十字且在交叉點(diǎn)處顯示鼠標(biāo)的當(dāng)前位置;當(dāng)鼠標(biāo)移動(dòng)時(shí),十字隨著鼠標(biāo)的移動(dòng)而移動(dòng)。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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論