版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024混凝土路面施工承包合同范本
- 專屬信息安全防護(hù)服務(wù)項(xiàng)目協(xié)議范本版B版
- 2024教學(xué)設(shè)備采購合同書
- 7 多元文化 多樣魅力第1課時(shí) 說課稿-2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 3 我很誠實(shí) 說課稿-2023-2024學(xué)年道德與法治三年級下學(xué)期統(tǒng)編版
- 福建省南平市萬安中學(xué)高一化學(xué)上學(xué)期期末試卷含解析
- 福建省南平市塔前中學(xué)2020年高二地理上學(xué)期期末試卷含解析
- 2023-2024學(xué)年滬科版(2019)高中信息技術(shù)必修一2.2《認(rèn)識智能停車場中的數(shù)據(jù)處理-體驗(yàn)數(shù)據(jù)處理的方法和工具》說課稿
- 生活中的藝術(shù)探索
- 閃耀前行模板
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
- 超聲科危急值內(nèi)容及報(bào)告制度
- 過賬協(xié)議模板
- 新零售門店運(yùn)營管理流程手冊
- 天津市2023-2024學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 生命教育項(xiàng)目式學(xué)習(xí):內(nèi)涵、價(jià)值與實(shí)踐路徑
- 心理學(xué)專業(yè)知識考試參考題庫500題(含答案)(一)
- 四川省成都市青白江區(qū)2024-2025學(xué)年六年級數(shù)學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測試題含解析
- 人教版體育三年級上冊立定跳遠(yuǎn) 教案
- 「粉底」消費(fèi)趨勢報(bào)告
- 診所的醫(yī)療廢物處置協(xié)議
評論
0/150
提交評論