《Java語言程序設(shè)計(jì)》課件第7章_第1頁
《Java語言程序設(shè)計(jì)》課件第7章_第2頁
《Java語言程序設(shè)計(jì)》課件第7章_第3頁
《Java語言程序設(shè)計(jì)》課件第7章_第4頁
《Java語言程序設(shè)計(jì)》課件第7章_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

7.1一個(gè)Applet程序的運(yùn)行

7.2Applet與HTML標(biāo)識

7.3Applet的生命周期與主要方法

7.4Java與圖形設(shè)計(jì)

7.5Java與多媒體

7.6雙重目的代碼

7.7小結(jié)

7.8習(xí)題

Applet的類層次如圖7-1所示。

Applet主要存在于AWT中的Applet類和Swing包中。7.1一個(gè)Applet程序的運(yùn)行圖7-1Applet類層次7.1.1小應(yīng)用程序Applet簡介

Applet是應(yīng)用Java語言編寫的類,它能夠嵌入到一個(gè)HTML頁面中,而且可通過Web瀏覽器下載和執(zhí)行。

Applet是一種特定類型的類,其執(zhí)行方式不同于應(yīng)用程序Application。應(yīng)用程序Application是從它的main()方法被調(diào)用時(shí)開始的;而Applet的生命周期在一定程度上則要復(fù)雜得多,我們在后面將詳細(xì)介紹。

因?yàn)锳pplet是在瀏覽器中運(yùn)行的,所以必須將一個(gè)Applet類嵌入到一個(gè)HTML網(wǎng)頁中,通過HTML代碼使瀏覽器調(diào)用Applet類。運(yùn)行Applet時(shí)只需在瀏覽器中訪問HTML網(wǎng)頁文件的URL地址即可。7.1.2小應(yīng)用程序?qū)嵗?/p>

編寫Applet時(shí),必須編寫一個(gè)Applet或JApplet類。下面分別編寫一個(gè)在Web頁面上輸出學(xué)生基本信息的Applet和JApplet。

【例7-1】編寫StudentInfo1.java源文件,以Applet類實(shí)現(xiàn)Web中學(xué)生基本信息的顯示。

importjava.awt.Graphics;

importjava.applet.Applet;

publicclassStudentInfo1extendsApplet

{ Stringname,sex,age;

publicvoidinit()

{

name="張三";

sex="男";

age="20";

}

publicvoidpaint(Graphicsg) {

g.drawString(name,10,20);

g.drawString(sex,10,40);

g.drawString(age,10,60);

}

}

【例7-2】編寫StudentInfo2.java源文件,以JApplet類實(shí)現(xiàn)Web中學(xué)生基本信息的顯示。

importjava.awt.Graphics;

importjavax.swing.*;

publicclassStudentInfo2extendsJApplet

{

Stringname,sex,age;

publicvoidinit() {

StudentInfo2PanelcontentPane=newStudentInfo2Panel();

setContentPane(contentPane);

}

}

classStudentInfo2PanelextendsJPanel

{ publicvoidpaintComponent(Graphicsg)

{

super.paintComponent(g);

g.drawString("張三",10,20);

g.drawString("男",10,40);

g.drawString("20",10,60);

}

} 編寫完上述兩段程序后,編譯源文件,使之生成StudentInfo1.class和StudentInfo2.class的字節(jié)碼文件。

編寫StudnetInfo1.html,其中包含如下代碼:

<Appletcode=SudentInfo1width=200height=300></Applet>

保存后在瀏覽器中瀏覽該文件,則StudentInfo1的JavaApplet程序執(zhí)行結(jié)果如圖7-2所示。圖7-2Applet在瀏覽器中的執(zhí)行以同樣方法編寫StudentInfo2.html,使類文件指向JApplet實(shí)現(xiàn)的StudentInfo2.class,然后在瀏覽器中執(zhí)行,結(jié)果同圖7-2。7.1.3小應(yīng)用程序查看器Appletviewer

Applet通常是在瀏覽器中運(yùn)行的,大多數(shù)瀏覽器,如HotJava或NetscapeNavigator等,均具有支持Java軟件程序運(yùn)行的能力。微軟的IE瀏覽器早期版本支持Applet的運(yùn)行,但后期取消了這種支持[1],為此JDK中附帶有一個(gè)專為查看Applet而設(shè)計(jì)但不支持HTML頁面查看的工具——Appletviewer。

[1]新版本J2SE安裝時(shí)提供在IE環(huán)境下Java程序的運(yùn)行支持。

Appletviewer是可以不必使用Web瀏覽器即可運(yùn)行Applet的Java應(yīng)用程序。它類似于一個(gè)“簡化的瀏覽器”。Appletviewer讀取命令行中URL所指定的HTML文件,忽略其他的HTML代碼。它不能顯示普通的HTML或嵌入在一個(gè)文本頁中的Applet。

Appletviewer帶有一個(gè)指向包含<applet>標(biāo)記的HTML文件的URL,這個(gè)URL被作為命令行參數(shù)。

如使用Appletviewer命令運(yùn)行StudentInfo2的JApplet程序,語法格式如下:

AppletviewerStudentInfo2.html

由此創(chuàng)建并顯示如圖7-3所示的小窗口。圖7-3Applet在Appletviewer中的執(zhí)行在例7-1和例7-2中,Java編寫的Applet程序若要在瀏覽器中運(yùn)行,必須將Applet嵌入在一個(gè)HTML頁面中,StudentInfo1.html嵌入語句是最簡單的實(shí)現(xiàn)方式,完整的Applet語法如下:

<applet

[archive=archiveList]

code=appletFile.class

width=pixelsheight=pixels

[codebase=codebaseURL]7.2Applet與HTML標(biāo)識[alt=alternateText]

[name=appletInstanceName]

[align=alignment]

[vspace=pixels][hspace=pixels]

>

[<paramname=appletAttribute1value=value>]

[<paramname=appletAttribute2value=value>]

...

[alternateHTML]

</applet>其中各部分代碼說明如下:

●?archive=archiveList.這一可選屬性指定了壓縮包文件(.jar或.zip)。壓縮包中包含Applet的類文件和其他類文件,這些文件在Applet下載前從Web服務(wù)器上獲得,.jar文件之間應(yīng)該以“,”隔開,Applet的類文件必須壓縮進(jìn)?.jar文件。

如:

<Appletcode=”Test.class”archive=”Test.jar,Swing.jar”width=100height=100>

</Applet>●?code=appletFile.class.這是一個(gè)必需的屬性,它指定了含有已編譯好的Applet子類的文件名[1]。

●?width=pixelsheight=pixels.這些必需的屬性給出了Applet顯示區(qū)域的初始寬度和高度(以像素為單位),但不包括Applet所產(chǎn)生的任何窗口或?qū)υ捒颉?/p>

●?codebase=codebaseURL.這是一個(gè)可選屬性,它指定了Applet的基址,即小應(yīng)用程序所在的目錄,若該屬性為空,則將HTML文件所在目錄作為URL值。●?alt=alternateText.這一可選屬性指定了當(dāng)瀏覽器能讀取Applet標(biāo)記但不能執(zhí)行JavaApplet時(shí)要顯示的文本。

●?name=appletInstanceName.這個(gè)可選屬性為Applet實(shí)例指定有關(guān)名稱,從而使得在同一頁面上的Applet可找到彼此(以及互相通信)。

●?align=alignment.這個(gè)可選屬性指定了Applet的對齊方式。它的可取值與基本的HTML中IMG標(biāo)記的相應(yīng)屬性相同,為left、right、top、texttop、middle、absmiddle、baseline、bottom和absbottom。●?vspace=pixelshspace=pixels.這些可選屬性指定了在Applet上下(vspace)及左右(hspace)的像素?cái)?shù)目。其用法與IMG標(biāo)記的vspace和hspace屬性相同。

●?<paramname=appletAttribute1value=value>.這個(gè)標(biāo)記提供了一種可帶有由“外部”指定的數(shù)值的Applet,它對Java應(yīng)用程序的作用與命令行參數(shù)相同。Applet用getParameter()方法來存取它們的屬性。

Applet標(biāo)記是由瀏覽器默認(rèn)的Java虛擬機(jī)來執(zhí)行的,為了在瀏覽器中使用Java插件,需要使用Java插件標(biāo)記來代替HTML頁面中的Applet標(biāo)記。Java插件標(biāo)記以O(shè)BJECT或EMBED為標(biāo)記。

Applet的生命周期與Application的生命周期相比要稍微復(fù)雜一些,其生命周期涉及四個(gè)方法,分別是init()、start()、stop()和destory()。這四個(gè)方法的執(zhí)行順序如圖7-4所示。

init():該函數(shù)在Applet被創(chuàng)建并裝入瀏覽器(如Appletviewer)時(shí)被調(diào)用。Applet可用這個(gè)方法來初始化數(shù)據(jù)的值。本方法只在Applet首次裝入時(shí)被調(diào)用,并且在調(diào)用start()之前執(zhí)行完成。7.3Applet的生命周期與主要方法圖7-4Applet的生命周期

start():當(dāng)init()方法完成后start()開始執(zhí)行。該方法執(zhí)行后使Applet成為“活動態(tài)”。無論Applet何時(shí)成為可視,它同樣要執(zhí)行一次,如當(dāng)瀏覽器在被圖標(biāo)化后又恢復(fù)時(shí),或者當(dāng)瀏覽器在鏈接到另一個(gè)URL后又返回含有這個(gè)Applet的頁面時(shí)。

stop():該方法在Applet成為不可視時(shí)被調(diào)用,這種情況一般在瀏覽器被圖標(biāo)化或鏈接到另一個(gè)URL時(shí)會出現(xiàn)。

start()和stop()形成一對動作:start()激活A(yù)pplet中的某一行為,而stop()則將它禁止。

destory():當(dāng)瀏覽器關(guān)閉時(shí),執(zhí)行該方法,將回收Applet所占用的內(nèi)存。如果在瀏覽器關(guān)閉前Applet處在“活動態(tài)”,則先調(diào)用stop()方法,再調(diào)用destory()方法。

【例7-3】Web頁面背景音樂的播放(Applet生命周期中各種方法的調(diào)用)。importjava.applet.*;

importjavax.swing.*;

publicclassAppletMathodextendsJapplet

{

AudioClipmusic;

publicvoidinit()

{

music=getAudioClip(getDocumentBase(),"Test.au"); publicvoidstart()

{

music.loop();

}

publicvoidstop()

{

music.stop();

}

}

在執(zhí)行init()時(shí)初始化music對象;在頁面調(diào)入并執(zhí)行strat()時(shí)循環(huán)播放音樂,當(dāng)離開頁面或頁面最小化為圖標(biāo)時(shí)停止播放音樂。7.4.1Applet組件顯示

參考圖7-1,Applet類屬于java.aet.Panel類的子類,因此Applet也是一種面板的容器,在Applet中可以加入組件,并通過SetLayout()方法來修改組件的布局格式。

【例7-4】在Applet中顯示組件實(shí)例。

importjava.awt.*;

importjava.applet.Applet;

publicclassAppletComponetDisplayextendsApplet

{

publicvoidinit()7.4Java與圖形設(shè)計(jì)setLayout(newBorderLayout());

Labellb0=newLabel("學(xué)生基本信息顯示");

Buttonbtn=newButton("確定");

add(lb0,"North");

add(btn,"South");

Panelp=newPanel();

p.setLayout(newGridLayout(3,2));

Labellb1=newLabel("姓名");

Labellb2=newLabel("性別");

Labellb3=newLabel("年齡"); TextFieldtf1=newTextField("張三");

TextFieldtf2=newTextField("男");

TextFieldtf3=newTextField("20");

p.add(lb1);p.add(tf1);p.add(lb2);

p.add(tf2);p.add(lb3);p.add(tf3);

add(p,"Center");

}

}

運(yùn)行結(jié)果如圖7-5所示。圖7-5Applet組件的顯示7.4.2文本與圖形

Applet圖形是通過paint()方法來實(shí)現(xiàn)的。paint()方法帶有參數(shù),它是java.awt.Graphics類的一個(gè)實(shí)例對象。我們應(yīng)用paint()方法可以在Applet中輸出文本或者繪制圖形。

1.文本輸出

我們通過Graphics實(shí)例對象g,調(diào)用paint()方法在Applet中輸出一段文本,調(diào)用paint()方法輸出字符文本時(shí)的參數(shù)分別為輸出字符串、屏幕橫坐標(biāo)及屏幕縱坐標(biāo)。

同其他軟件相似,Java在繪制圖形時(shí)的坐標(biāo)系也是以窗口的左上角作為原點(diǎn),離開原點(diǎn)向右的像素點(diǎn)數(shù)作為橫坐標(biāo),離開原點(diǎn)向下的像素?cái)?shù)為縱坐標(biāo)。例7-5為向屏幕輸出字符串的實(shí)例,其執(zhí)行后的結(jié)果如圖7-6所示。圖7-6文本輸出

2.字體設(shè)置

例7-5中輸出字符串時(shí),若事先沒有設(shè)置它的字體和字形,則默認(rèn)輸出一般為宋體(中文字體)無加黑、無加粗和傾斜。應(yīng)用Graphics類中的getFont()方法,可以知道當(dāng)前輸出字符所用的字體;應(yīng)用setFont方法,可以設(shè)置輸出字符的字體。例7-6為創(chuàng)建字體的實(shí)例對象,對繪圖通過g.setFont()方法來設(shè)置字體,運(yùn)行效果如圖7-7所示。圖7-7字體變換此外,對組件實(shí)例對象也可以設(shè)置字體,如:

Fontf=newFont(“楷體”,Font.BOLD,14);

TextFieldtf1=NewTextField(“確定”);

tf1.setFont(f);

3.顏色設(shè)置

應(yīng)用Graphics類的setColor()可以設(shè)置繪圖和輸出字符串時(shí)的顏色。

Java的Color構(gòu)造函數(shù)為

publicColor(intr,intg,intb)

顏色可以由三種基本顏色(紅、綠、藍(lán))的值來確定,該值為0~255之間的數(shù)值,各顏色值不同,構(gòu)成的顏色也不同。此外Java中還有一些顏色的常量,可以直接使用,如BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE、YELLOW等。例7-7為顏色設(shè)置,其程序運(yùn)行結(jié)果如圖7-8所示。圖7-8顏色設(shè)置

4.繪制圖形

在Java.Graphics類中,通過drawLine、drawOval、drawPolygn、drawRect等方法可以繪制直線、橢圓、多邊形、矩形等,通過fillArc、fillRect、fillPolygn、fillOval等方法可繪制覆蓋區(qū)域的圓弧、矩形、多邊形和橢圓等。

繪制直線:drawLine(intx1,inty1,intx2,inty2),其中x1和y1指定了起始點(diǎn)的坐標(biāo),x2和y2指定了終點(diǎn)的坐標(biāo),兩點(diǎn)連接形成一條直線。繪制矩形和填充矩形:drawRect(intx,inty,intwidth,intheight)、fillRect(intx,inty,intwidth,intheight),通過x和y來設(shè)置起點(diǎn)坐標(biāo),然后通過width和height來繪出矩形或矩形填充區(qū)域。

繪制圓角矩形和填充圓角矩形:drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)、fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight),通過arcHeight和arcWidth來設(shè)置圓角大小。同理,繪制三維矩形和填充三維矩形以及繪制橢圓和填充橢圓的方法如下:

draw3DRect(intx,inty,intwidth,intheight,booleanraised)

fill3DRect(intx,inty,intwidth,intheight,booleanraised)

drawOval(intx,inty,intwidth,intheight)

fillOval(intx,inty,intwidth,intheight)圖7-9繪制幾何圖形在Java后續(xù)版本中,開發(fā)了Java2D的圖形類,如Point2D、Line2D、Rectangle2D、Arc2D等都是Shape的接口,要實(shí)現(xiàn)一個(gè)2D圖形,需首先創(chuàng)建一個(gè)實(shí)現(xiàn)了Shape接口的2D類的實(shí)例對象,然后調(diào)用Graphics2D類的draw(Shape)方法。7.5.1圖像顯示

Java支持GIF、JPEG、PNG三種文件格式,要在Applet中顯示圖像,首先應(yīng)使用getImage方法加載圖像,然后使用drawImage方法顯示圖像。

1.加載圖像

getImage方法語法如下:

ImagegetImage(URLurl);

ImagegetImage(URLurl,Stringname);7.5Java與多媒體第一種方法可直接通過URL指定圖像文件的絕對URL地址。第二種方法可指定圖像文件的基地址和圖像文件的文件名,若圖像文件和Applet文件處在同一目錄中,則可以用getCodeBase()方法來獲取基地址;若圖像文件和Applet文件的描述HTML文件處在同一目錄中,則以getDocumentBase來獲取基地址。

2.顯示圖像

drawImage方法重構(gòu)有很多種方法,我們以基本方法為例來說明,其余方法可參考JDK1.6.0API文檔。

例7-9為應(yīng)用drawImage()方法顯示圖像,其運(yùn)行效果如圖7-10所示。圖7-10圖像顯示7.5.2動畫設(shè)計(jì)

Java的動畫設(shè)計(jì)實(shí)際上是一個(gè)線程的應(yīng)用實(shí)例,通過不同時(shí)間調(diào)用不同的圖像文件來實(shí)現(xiàn)動畫效果。首先在Applet初始化時(shí)將圖像加載至一圖像數(shù)組frame中,其次在Applet啟動時(shí)同時(shí)啟動延時(shí)線程,并且在Applet運(yùn)行期間先延時(shí),產(chǎn)生100ms的視覺暫停時(shí)間,然后調(diào)用repaint()方法顯示不同的圖像,不斷重復(fù)上述過程就形成了一個(gè)動畫的效果。

【例7-10】動畫演示。importjava.awt.*;

importjava.applet.Applet;

publicclassAnmiationextendsAppletimplementsRunnable

{

Imageframe[];

ThreadthreadNina;

intframe_i;

intdelay_time;

booleanRuning=true;

publicvoidinit()

{圖7-11Java動畫7.5.3播放聲音

在java.applet包中集成了java.applet.AudioClip類,該類用于在Applet中播放聲音[1]。播放聲音是通過play方法來實(shí)現(xiàn)的。play方法的語法如下:

play(URLsoundDirectory,StringsoundFile);

play(URLsoundURL);

同加載圖像文件類似,采用第一種方法時(shí),URL用來指定聲音文件所在目錄,soundFile字符串用來指定所要播放的聲音文件名。若采用第二種方法,則直接由URL資源定位符指定所要播放聲音文件的URL地址。

[3]早期的JDK只支持播放8位、8kHz單通道的u律(.au)文件。JDK現(xiàn)在支持“.au”、“.aif”、“.mid”、“.wav”、“.rfm”文件。以下為在Applet的paint方法中直接調(diào)用play來播放“cuckoo.su”的聲音文件。

publicvoidpaint(Graphicsg)

{play(getDocumentBase(),“Sounds/spacemusic.au”);}

調(diào)用play方法時(shí),聲音文件只播放一次,如何實(shí)現(xiàn)循環(huán)播放或者可控播放呢?首先通過如下方式加載聲音文件:

AudioClipsound;

sound=getAudioClip(getDocumentBase(),“bark.au”);

其次通過聲音對象的sound.loop

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論