




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
7.1一個Applet程序的運行
7.2Applet與HTML標識
7.3Applet的生命周期與主要方法
7.4Java與圖形設計
7.5Java與多媒體
7.6雙重目的代碼
7.7小結(jié)
7.8習題
Applet的類層次如圖7-1所示。
Applet主要存在于AWT中的Applet類和Swing包中。7.1一個Applet程序的運行圖7-1Applet類層次7.1.1小應用程序Applet簡介
Applet是應用Java語言編寫的類,它能夠嵌入到一個HTML頁面中,而且可通過Web瀏覽器下載和執(zhí)行。
Applet是一種特定類型的類,其執(zhí)行方式不同于應用程序Application。應用程序Application是從它的main()方法被調(diào)用時開始的;而Applet的生命周期在一定程度上則要復雜得多,我們在后面將詳細介紹。
因為Applet是在瀏覽器中運行的,所以必須將一個Applet類嵌入到一個HTML網(wǎng)頁中,通過HTML代碼使瀏覽器調(diào)用Applet類。運行Applet時只需在瀏覽器中訪問HTML網(wǎng)頁文件的URL地址即可。7.1.2小應用程序?qū)嵗?/p>
編寫Applet時,必須編寫一個Applet或JApplet類。下面分別編寫一個在Web頁面上輸出學生基本信息的Applet和JApplet。
【例7-1】編寫StudentInfo1.java源文件,以Applet類實現(xiàn)Web中學生基本信息的顯示。
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類實現(xiàn)Web中學生基本信息的顯示。
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實現(xiàn)的StudentInfo2.class,然后在瀏覽器中執(zhí)行,結(jié)果同圖7-2。7.1.3小應用程序查看器Appletviewer
Applet通常是在瀏覽器中運行的,大多數(shù)瀏覽器,如HotJava或NetscapeNavigator等,均具有支持Java軟件程序運行的能力。微軟的IE瀏覽器早期版本支持Applet的運行,但后期取消了這種支持[1],為此JDK中附帶有一個專為查看Applet而設計但不支持HTML頁面查看的工具——Appletviewer。
[1]新版本J2SE安裝時提供在IE環(huán)境下Java程序的運行支持。
Appletviewer是可以不必使用Web瀏覽器即可運行Applet的Java應用程序。它類似于一個“簡化的瀏覽器”。Appletviewer讀取命令行中URL所指定的HTML文件,忽略其他的HTML代碼。它不能顯示普通的HTML或嵌入在一個文本頁中的Applet。
Appletviewer帶有一個指向包含<applet>標記的HTML文件的URL,這個URL被作為命令行參數(shù)。
如使用Appletviewer命令運行StudentInfo2的JApplet程序,語法格式如下:
AppletviewerStudentInfo2.html
由此創(chuàng)建并顯示如圖7-3所示的小窗口。圖7-3Applet在Appletviewer中的執(zhí)行在例7-1和例7-2中,Java編寫的Applet程序若要在瀏覽器中運行,必須將Applet嵌入在一個HTML頁面中,StudentInfo1.html嵌入語句是最簡單的實現(xiàn)方式,完整的Applet語法如下:
<applet
[archive=archiveList]
code=appletFile.class
width=pixelsheight=pixels
[codebase=codebaseURL]7.2Applet與HTML標識[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服務器上獲得,.jar文件之間應該以“,”隔開,Applet的類文件必須壓縮進?.jar文件。
如:
<Appletcode=”Test.class”archive=”Test.jar,Swing.jar”width=100height=100>
</Applet>●?code=appletFile.class.這是一個必需的屬性,它指定了含有已編譯好的Applet子類的文件名[1]。
●?width=pixelsheight=pixels.這些必需的屬性給出了Applet顯示區(qū)域的初始寬度和高度(以像素為單位),但不包括Applet所產(chǎn)生的任何窗口或?qū)υ捒颉?/p>
●?codebase=codebaseURL.這是一個可選屬性,它指定了Applet的基址,即小應用程序所在的目錄,若該屬性為空,則將HTML文件所在目錄作為URL值。●?alt=alternateText.這一可選屬性指定了當瀏覽器能讀取Applet標記但不能執(zhí)行JavaApplet時要顯示的文本。
●?name=appletInstanceName.這個可選屬性為Applet實例指定有關名稱,從而使得在同一頁面上的Applet可找到彼此(以及互相通信)。
●?align=alignment.這個可選屬性指定了Applet的對齊方式。它的可取值與基本的HTML中IMG標記的相應屬性相同,為left、right、top、texttop、middle、absmiddle、baseline、bottom和absbottom。●?vspace=pixelshspace=pixels.這些可選屬性指定了在Applet上下(vspace)及左右(hspace)的像素數(shù)目。其用法與IMG標記的vspace和hspace屬性相同。
●?<paramname=appletAttribute1value=value>.這個標記提供了一種可帶有由“外部”指定的數(shù)值的Applet,它對Java應用程序的作用與命令行參數(shù)相同。Applet用getParameter()方法來存取它們的屬性。
Applet標記是由瀏覽器默認的Java虛擬機來執(zhí)行的,為了在瀏覽器中使用Java插件,需要使用Java插件標記來代替HTML頁面中的Applet標記。Java插件標記以OBJECT或EMBED為標記。
Applet的生命周期與Application的生命周期相比要稍微復雜一些,其生命周期涉及四個方法,分別是init()、start()、stop()和destory()。這四個方法的執(zhí)行順序如圖7-4所示。
init():該函數(shù)在Applet被創(chuàng)建并裝入瀏覽器(如Appletviewer)時被調(diào)用。Applet可用這個方法來初始化數(shù)據(jù)的值。本方法只在Applet首次裝入時被調(diào)用,并且在調(diào)用start()之前執(zhí)行完成。7.3Applet的生命周期與主要方法圖7-4Applet的生命周期
start():當init()方法完成后start()開始執(zhí)行。該方法執(zhí)行后使Applet成為“活動態(tài)”。無論Applet何時成為可視,它同樣要執(zhí)行一次,如當瀏覽器在被圖標化后又恢復時,或者當瀏覽器在鏈接到另一個URL后又返回含有這個Applet的頁面時。
stop():該方法在Applet成為不可視時被調(diào)用,這種情況一般在瀏覽器被圖標化或鏈接到另一個URL時會出現(xiàn)。
start()和stop()形成一對動作:start()激活Applet中的某一行為,而stop()則將它禁止。
destory():當瀏覽器關閉時,執(zhí)行該方法,將回收Applet所占用的內(nèi)存。如果在瀏覽器關閉前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()時初始化music對象;在頁面調(diào)入并執(zhí)行strat()時循環(huán)播放音樂,當離開頁面或頁面最小化為圖標時停止播放音樂。7.4.1Applet組件顯示
參考圖7-1,Applet類屬于java.aet.Panel類的子類,因此Applet也是一種面板的容器,在Applet中可以加入組件,并通過SetLayout()方法來修改組件的布局格式。
【例7-4】在Applet中顯示組件實例。
importjava.awt.*;
importjava.applet.Applet;
publicclassAppletComponetDisplayextendsApplet
{
publicvoidinit()7.4Java與圖形設計setLayout(newBorderLayout());
Labellb0=newLabel("學生基本信息顯示");
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");
}
}
運行結(jié)果如圖7-5所示。圖7-5Applet組件的顯示7.4.2文本與圖形
Applet圖形是通過paint()方法來實現(xiàn)的。paint()方法帶有參數(shù),它是java.awt.Graphics類的一個實例對象。我們應用paint()方法可以在Applet中輸出文本或者繪制圖形。
1.文本輸出
我們通過Graphics實例對象g,調(diào)用paint()方法在Applet中輸出一段文本,調(diào)用paint()方法輸出字符文本時的參數(shù)分別為輸出字符串、屏幕橫坐標及屏幕縱坐標。
同其他軟件相似,Java在繪制圖形時的坐標系也是以窗口的左上角作為原點,離開原點向右的像素點數(shù)作為橫坐標,離開原點向下的像素數(shù)為縱坐標。例7-5為向屏幕輸出字符串的實例,其執(zhí)行后的結(jié)果如圖7-6所示。圖7-6文本輸出
2.字體設置
例7-5中輸出字符串時,若事先沒有設置它的字體和字形,則默認輸出一般為宋體(中文字體)無加黑、無加粗和傾斜。應用Graphics類中的getFont()方法,可以知道當前輸出字符所用的字體;應用setFont方法,可以設置輸出字符的字體。例7-6為創(chuàng)建字體的實例對象,對繪圖通過g.setFont()方法來設置字體,運行效果如圖7-7所示。圖7-7字體變換此外,對組件實例對象也可以設置字體,如:
Fontf=newFont(“楷體”,Font.BOLD,14);
TextFieldtf1=NewTextField(“確定”);
tf1.setFont(f);
3.顏色設置
應用Graphics類的setColor()可以設置繪圖和輸出字符串時的顏色。
Java的Color構(gòu)造函數(shù)為
publicColor(intr,intg,intb)
顏色可以由三種基本顏色(紅、綠、藍)的值來確定,該值為0~255之間的數(shù)值,各顏色值不同,構(gòu)成的顏色也不同。此外Java中還有一些顏色的常量,可以直接使用,如BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE、YELLOW等。例7-7為顏色設置,其程序運行結(jié)果如圖7-8所示。圖7-8顏色設置
4.繪制圖形
在Java.Graphics類中,通過drawLine、drawOval、drawPolygn、drawRect等方法可以繪制直線、橢圓、多邊形、矩形等,通過fillArc、fillRect、fillPolygn、fillOval等方法可繪制覆蓋區(qū)域的圓弧、矩形、多邊形和橢圓等。
繪制直線:drawLine(intx1,inty1,intx2,inty2),其中x1和y1指定了起始點的坐標,x2和y2指定了終點的坐標,兩點連接形成一條直線。繪制矩形和填充矩形:drawRect(intx,inty,intwidth,intheight)、fillRect(intx,inty,intwidth,intheight),通過x和y來設置起點坐標,然后通過width和height來繪出矩形或矩形填充區(qū)域。
繪制圓角矩形和填充圓角矩形:drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)、fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight),通過arcHeight和arcWidth來設置圓角大小。同理,繪制三維矩形和填充三維矩形以及繪制橢圓和填充橢圓的方法如下:
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的接口,要實現(xiàn)一個2D圖形,需首先創(chuàng)建一個實現(xiàn)了Shape接口的2D類的實例對象,然后調(diào)用Graphics2D類的draw(Shape)方法。7.5.1圖像顯示
Java支持GIF、JPEG、PNG三種文件格式,要在Applet中顯示圖像,首先應使用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為應用drawImage()方法顯示圖像,其運行效果如圖7-10所示。圖7-10圖像顯示7.5.2動畫設計
Java的動畫設計實際上是一個線程的應用實例,通過不同時間調(diào)用不同的圖像文件來實現(xiàn)動畫效果。首先在Applet初始化時將圖像加載至一圖像數(shù)組frame中,其次在Applet啟動時同時啟動延時線程,并且在Applet運行期間先延時,產(chǎn)生100ms的視覺暫停時間,然后調(diào)用repaint()方法顯示不同的圖像,不斷重復上述過程就形成了一個動畫的效果。
【例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方法來實現(xiàn)的。play方法的語法如下:
play(URLsoundDirectory,StringsoundFile);
play(URLsoundURL);
同加載圖像文件類似,采用第一種方法時,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方法時,聲音文件只播放一次,如何實現(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- HY/T 0460.3-2024海岸帶生態(tài)系統(tǒng)現(xiàn)狀調(diào)查與評估技術導則第3部分:紅樹林
- 2025年藝術創(chuàng)作與理論評價考試題及答案
- x射線考試題及答案
- 武漢合唱團面試題及答案
- 網(wǎng)絡工程師成功案例試題及答案
- 西方政治中的社會責任探討試題及答案
- 機電工程2025年創(chuàng)新思維試題及答案
- 軟件設計師考試心理素質(zhì)提升方法及試題與答案
- 教育公平實證研究與政策建議試題及答案
- 反腐敗斗爭的政治環(huán)境與動力分析試題及答案
- 國能集團工會工作報告
- 河南大河網(wǎng)數(shù)字科技有限公司招聘筆試題庫2025
- 補繳社保員工協(xié)議書
- 水電項目實施中的環(huán)境保護措施試題及答案
- 2025標準勞動合同范本及模板
- 2025屆廣東省佛山市順德區(qū)龍江鎮(zhèn)八下物理期末統(tǒng)考試題含解析
- 自動化辦公試題及答案
- GB 7718-2025食品安全國家標準預包裝食品標簽通則
- 2025中考語文??甲魑难侯}(10大主題+10篇范文)
- 安全工程安全系統(tǒng)工程課程設計
- 機械設計外文文獻翻譯、中英文翻譯、外文翻譯
評論
0/150
提交評論