版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第9章Applet程序9.1Applet簡介
9.1.1Applet說明1.查看方法:支持Java的Web瀏覽器appletviewer2.顯示AppletApplet是一種特殊的Java程序,它不能獨立運行。編譯器將Applet源程序編譯成Java字節(jié)碼(Byte-Code)后,在網(wǎng)頁中加載的是Java字節(jié)碼。在網(wǎng)絡(luò)上如果查看包含Java字節(jié)碼的網(wǎng)頁,則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)用時執(zhí)行.包括:創(chuàng)建對象,載入圖形,字體,設(shè)置參數(shù)等.(2)start():applet初始化后開始生命周期時執(zhí)行.包括開始線程,給輔助對象發(fā)送消息等,可執(zhí)行多次.(3)stop():在默認情況下,當(dāng)離開WEB頁時,applet將繼續(xù)執(zhí)行,并占用系統(tǒng)資源.調(diào)用stop()方法后,終止其執(zhí)行.再次回到該頁面時,重新調(diào)用start(),啟動applet(4)destroy()方法:當(dāng)Applet程序全部執(zhí)行完了,或是結(jié)束瀏覽器時,該方法被調(diào)用,用來終止Applet的生命周期;(5)paint():在頁面上畫圖.一般用repaint()重載paint(),實現(xiàn)圖形的刷新.(6)update()方法:用于更新Applet容器,刷新圖形.(9)repaint()方法:當(dāng)使用該方法時,程序會調(diào)用update方法清除paint()方法之前所畫的內(nèi)容,之后再次調(diào)用paint()方法重畫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("請輸入一個正整數(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è)計方法",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)在時刻”> </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類的常用方法方法說明ColorgetColor()返回當(dāng)前顏色voidsetColor(Colorc)用指定色來設(shè)置當(dāng)前顏色FontgetFont()返回當(dāng)前字體voidsetFont(Fontfont)用指定字體來設(shè)置當(dāng)前字體drawString(Stringstr,intx,inty)用當(dāng)前顏色和字體在指定位置上顯示一個字符串drawLine、drawRect、drawOval畫線、矩形、橢圓fillRext、fillOval畫實矩形、實橢圓19paint()方法和repaint()方法paint()方法是每個Applet必不可少的一部分,是Applet進行所有繪制的場所。當(dāng)在Applet窗口中要顯示或重新顯示任何事務(wù)時,必須調(diào)用paint方法。 publicvoidpaint(Graphicsg){……}repaint()方法:用來強制執(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類可以獲得豐富多彩和精確逼真的字體顯示效果。方法說明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)紅、綠、藍的取值范圍: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個標(biāo)簽,其前景色分別為青、綠藍三色。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á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運行結(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類提供了一個drawImage()方法,它能完成將Image對象中的圖像顯示在屏幕的特定位置上,就象顯示文本一樣方便。drawImage()方法的調(diào)用格式如下:
booleandrawImage(Imageimg,intx,inty,ImageObserverobserver)
其中img參數(shù)就是要顯示的Image對象。x和y參數(shù)是該圖像左上角的坐標(biāo)值。observer參數(shù)則是一個ImageObserver接口(interface),它用來跟蹤圖像文件裝載是否已經(jīng)完成的情況,通常我們都將該參數(shù)置為this,即傳遞本對象的引用去實現(xiàn)這個接口。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目錄移到別處時,圖像文件依然可以被正確裝載3)Filefile=newFile("d:\\");Imageimg=getImage(file.toURI().toURL(),"fuya.jpg")33例:publicvoidpaint(Graphicsg){ drawImage(img,0,0,this); }作用:在指定的位置上顯示圖像方法說明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接口,可同時播放多個AudioClip對象,播放方法:
voidplay(URLurl)voidplay(URLurl,Stringname)loop()方法重復(fù)播放
stop()方法結(jié)束放音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();}}//關(guān)閉背景音樂例9_12聲音文件的播放實例二389.5.3動畫效果的實現(xiàn)1、動畫的實現(xiàn)Java中實現(xiàn)動畫的原理很簡單,就是使用幀動畫技術(shù)。也就是先把圖像加載,每一幅圖像都是一幀,在屏幕上顯示動畫的第一幀(也就是第一幅畫面),然后每隔很短的時間再顯示另外一幀,如此往復(fù)。由于人眼的視覺暫停而感覺好象畫面中的物體在運動。39當(dāng)用paint()方法在屏幕上畫好一幀畫面時,再用鼠標(biāo)拖動這個窗口或用其他窗口覆蓋它,再移開時,這幀畫面并未被破壞,而是很快地就被重新畫好了。其實,系統(tǒng)是去調(diào)用repaint()方法來完成重畫任務(wù),而repaint()方法又去直接調(diào)用了update()方法,update()方法則先清除整個Applet區(qū)域里的內(nèi)容,然后再調(diào)用paint()方法,從而完成了一次重畫工作。40paint()與update()某組件的paint()和
update()為系統(tǒng)自動調(diào)用的有關(guān)圖形繪制的方法,不可人為編程調(diào)用;但可編程重新定義其操作內(nèi)容使用repaint()方法可以觸發(fā)update()方法paint()當(dāng)某些操作破壞了顯示,需重新繪制時第一次繪制repaint()編程控制1.擦除并填充成背景色2.調(diào)用paint()update()調(diào)用41使用兩個線程,一個是原來的程序,另一個用來處理執(zhí)行無窮循環(huán)的部分.(1)定義Applet類,實現(xiàn)Runnable接口publicclass...extendsAppletimplementsRunnable{(2)init()方法------不改變(3)start()方法中,創(chuàng)建一個動畫線程并啟動
publicvoidstart(){if(runner==null);{runner=newThread(this); //newThreadrunner.start();}}例9_13用線程實現(xiàn)動畫42(4)stop()方法,停止線程
publicvoidstop(){if(runner!=null){//runner.stop();runner=null;}}(5)run()方法,控制動畫循環(huán)。每次循環(huán),調(diào)用repaint(),重繪刷新.publicvoidrun(){while(Thread.currentThread()==runner){ //幀號或其他標(biāo)志變量變化
repaint();}43(6)paint()方法publicvoidpaint(Graphicsg){//根據(jù)幀號或其他標(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動畫示例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例題示范:動畫的實現(xiàn)50例9_15編寫一個JApplet程序,以鼠標(biāo)的當(dāng)前位置為交叉點畫一個十字且在交叉點處顯示鼠標(biāo)的當(dāng)前位置;當(dāng)鼠標(biāo)移動時,十字隨著鼠標(biāo)的移動而移動。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)保項目預(yù)付款合同
- 二零二五年度知識產(chǎn)權(quán)授權(quán)合同取消協(xié)議
- 2025年度超市租賃合同排他性員工培訓(xùn)協(xié)議
- 2025年度企業(yè)宿舍押金及居住權(quán)益保障合同
- 二零二五年度工程車加油與設(shè)備租賃合同
- 南昌工程學(xué)院《外國文學(xué)(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 綿陽師范學(xué)院《工程制圖A》2023-2024學(xué)年第一學(xué)期期末試卷
- 眉山藥科職業(yè)學(xué)院《攝影基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 馬鞍山師范高等??茖W(xué)校《兒童語言習(xí)得》2023-2024學(xué)年第一學(xué)期期末試卷
- 隴東學(xué)院《傳統(tǒng)手工印染》2023-2024學(xué)年第一學(xué)期期末試卷
- 銀行信息安全保密培訓(xùn)
- 市政道路工程交通疏解施工方案
- 2024年部編版初中七年級上冊歷史:部分練習(xí)題含答案
- 拆遷評估機構(gòu)選定方案
- 床旁超聲監(jiān)測胃殘余量
- 上海市松江區(qū)市級名校2025屆數(shù)學(xué)高一上期末達標(biāo)檢測試題含解析
- 綜合實踐活動教案三上
- 《新能源汽車電氣設(shè)備構(gòu)造與維修》項目三 新能源汽車照明與信號系統(tǒng)檢修
- 2024年新課標(biāo)《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)》測試題(附含答案)
- 醫(yī)院培訓(xùn)課件:《靜脈中等長度導(dǎo)管臨床應(yīng)用專家共識》
- 中國國際大學(xué)生創(chuàng)新大賽與“挑戰(zhàn)杯”大學(xué)生創(chuàng)業(yè)計劃競賽(第十一章)大學(xué)生創(chuàng)新創(chuàng)業(yè)教程
評論
0/150
提交評論