Java小應用程序(Applet)的設計課件_第1頁
Java小應用程序(Applet)的設計課件_第2頁
Java小應用程序(Applet)的設計課件_第3頁
Java小應用程序(Applet)的設計課件_第4頁
Java小應用程序(Applet)的設計課件_第5頁
已閱讀5頁,還剩85頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java小應用程式(Applet)的設計12.1編寫一個Applet

要編寫一個Applet,必須首先從java.applet.Applet派生一個類:

importjava.applet.*;publicclassSimpleAppletextendsApplet{…}

需要注意的是,派生出的Applet的類必須定義為public類型。java.applet.Applet類實際上是java.awt.Panel的子類。Applet和AWT類的繼承關係如圖12.1所示。圖12.1

這種層次關係顯示,一個Applet可直接用作一個AWT佈局的容器。因為Applet是Panel的子類,所以它有一個缺省的流(Flow)佈局管理器。Component,Container和Panel類的方法被Applet類繼承了下來。

12.1.1Applet的執行框架在Java出現之前,人們就已經開始使用HTML(超文本標記語言)進行Web頁面的設計了。然而,對HTML稍有了解的人都知道,HTML所提供的設計能力是極其有限的。Java率先提供了讓Web頁面實現更豐富的GUI和邏輯運算能力的方法,這種方法是通過將一個Java的類插入到Web頁面中來實現的。

如何編寫一個Applet並令它在流覽器中執行呢?方法很簡單,只要繼承java.applet包下的Applet類,並實現一些必要的方法即可。下麵我們來看一個最簡單的Applet的例子,並學會怎樣在流覽器中令它運行。例12.1SimpleApplet.javaimportjava.applet.*;importjava.awt.*;publicclassSimpleAppletextendsApplet{Stringtext=null; publicvoidinit() { text="Asimpleappletdemo!"; setBackground(Color.YELLOW); } publicvoidstart() { System.out.println("starting..."); } publicvoidstop(){

System.out.println("stopping..."); } publicvoiddestroy() { System.out.println("preparingtounload..."); } publicvoidpaint(Graphicsg) { System.out.println("Paint");g.drawString(text,15,25); }}

上面是一個最簡單的Applet例子,大家可能已經發現,這個程式沒有main()方法,的確,我們前面所學到的Java應用程式都必須由main()方法處進入,而在一個Applet中卻不是這樣。Applet的生命週期稍微有些複雜,它需要通過流覽器來運行,所以為了執行它,還必須有一個HTML編寫的Web頁面。例12.2SimpleApplet.html<html><body><appletname="SimpleApplet"codebase=.code=SimpleApplet.classwidth=200height=100></applet></body></html>

這裏將不準備詳細討論有關HTML的問題,如果不太瞭解,可以自己查閱相關資料。我們只稍微解釋一下上面的HTML代碼。它通過標記<Applet>和參數告訴流覽器下載執行一個Applet。其中,name這個參數表示Applet的名字;codebase表示編譯好的Applet位元組碼的路徑;code表示Applet檔的檔案名;width和height指定了該Applet的寬度和高度。name和codebase這兩個參數並不是必須的,如果Applet位元組碼檔和html檔在同一路徑下,則可以不加codebase參數。width和height這兩個參數一定要加,所以在Applet程式中可以不需要設置Applet的Panel的大小。

把這個HTML檔和編譯好的Applet保存在同一個目錄下(HTML檔並不一定要和Applet同名),然後用流覽器打開這個HTML檔,將看到這個最簡單的小應用程式的運行結果。除了通過流覽器來運行Applet,Java平臺本身也提供了一個調試Applet的方法。在JDK包中帶有一個小應用程式觀察器AppletViewer.exe,只要在Windows命令行窗口中輸入:

appletviewerSimpleApplet.html

就會看到和在流覽器中運行基本相同的輸出結果。圖12.2和圖12.3分別列出了通過兩種方式運行例子SimpleApplet的輸出結果。

現在我們來看看這個Applet到底是如何運作的。大家可能已經注意到,在上面的例子SimpleApplet中,沒有main()方法。一般的Java應用程式都是由main()方法處進入,而在Applet中卻不是這樣。在構造函數完成了它的任務後,流覽器將自動調用init()方法,所以通常把Applet的基本初始化操作放在這裏。init()結束後,流覽器調用另一個稱為start()的方法,start()通常在Applet成為可見時被調用。start()方法結束後,piant()方法會緊接著被調用來向Applet的Panel上繪圖。這樣,一個Applet就已經運行起來了。用戶離開了Applet所在的頁面時,stop()方法被調用停止Applet的一些工作。直到流覽器關閉時,destroy()方法才被調用來完成最後的清除工作。當然Applet的生命週期比上面所討論的要稍微複雜一些。圖12.2

圖12.312.1.2Applet的安全機制我們已經知道,Applet是通過流覽器下載並自動運行的,這聽起來好像有些可怕,通過流覽器自動運行,這不正是病毒製造者的"夢想"嗎。Applet的設計者可能會把Applet設計成一個病毒,並借助流覽器讓它進入用戶的電腦。聽起來很可怕,但Java的設計者們也考慮到了這一點,所以對Applet的能力做了種種限制,只要一個Applet試圖違反安全條例,小應用程式安全管理器(AppletSecurityManager)就會發出一個SecurityException(安全違例)消息。

那麼到底哪些是Applet可以做的,哪些是不可以做的呢?小應用程式所能夠控制的安全程度是在流覽器層次上實現的,小應用程式的安全機制通過"沙箱"(sandbox)控制。在大多數流覽器上,在沙箱內運行時,缺省地禁止以下操作:●運行時執行另一程式:小應用程式絕不能運行任何一個本地可執行程式。●任何檔的輸入/輸出:小應用程式不能讀/寫本地電腦的檔系統。●調用任何本地方法:除了所用Java版本號,操作系統名和版本號,小應用程式不能獲取任何與本地電腦有關的資訊,也不能通過調用任何本地方法、API等方法獲得。特別是,小應用程式不能獲得用戶名、電子郵件地址等等資訊。●嘗試打開除提供Applet的主機之外的任何系統的Socket:除了下載它的伺服器之外,小應用程式不能和任何一臺主機通信。

這些限制的關鍵在於:通過限制Applet對系統檔的存取來阻止它侵犯一個遠程系統的隱私或破壞該系統;禁止執行另一程式和不允許調用本地方法限制了Applet啟動未經JVM檢查的代碼;對Socket的限制則禁止了與另一個可能有危害性的程式的通信。由於小應用程式是由JVM(JavaVirtualMachine)解釋執行的位元組碼,而非由CPU直接執行的機器碼,所以只要在JVM中檢查了小應用程式的指令和程式區域,就可以確定,小應用程式不會對用戶電腦系統造成較大的危害。表12.1顯示了小應用程式在沙箱中運行時的功能。表12.1小應用程式的功能

流覽器中運行小應用程式觀察器中運行讀/寫本地檔否是獲取檔資訊否是刪除檔否是運行另一程式否否讀取username屬性否是連接伺服器上的網路端口是是連接另一臺主機上的網路端口否是下載Java庫否是調用退出否是創建一個彈出試窗口帶有警告資訊是

在這些限制下,小應用程式的能力似乎大打折扣了,這對那些惡意的設計者是有效的措施,但是也給開發者們造成了限制。如果沒有辦法打破這些限制,那麼小應用程式所能做的就太有限了。對此,Java的設計者也提供瞭解決辦法,那就是簽名類。小程式提供者可以編寫一個帶有簽名的Applet,當流覽器下載並運行這個Applet的時候,會提示用戶這是一個簽名Applet類,並詢問用戶是否信任該設計者。如果取得用戶的信任,那麼這個Applet就可以突破所有的限制,像一個普通應用程式那樣在用戶的電腦上運行了。12.1.3Applet的主要方法

Applet類的一些主要方法有:●publicvoidinit()

該方法在Applet被流覽器載入記憶體後自動調用,通常用來初始化數據的值。本方法只在Applet首次裝入時被調用,並在調用start()方法前完成。假如要創建一個Applet生存期內的線程,就可以在該方法中創建,在destory方法中結束。●publicvoidstart()

當init()方法完成後,流覽器會自動調用start()方法。它的執行使得Applet成為"活動"的。並且每次Applet成為可見的時,它都要執行一次,如:當流覽器在被最小化後又恢復時,或者從其他web頁返回含有這個Applet的頁面時。通常我們把主要程式代碼寫在這裏,這一方法的典型用法是啟動動畫和播放聲音。●publicvoidstop()

當流覽器切換到另一個web頁面或將要關閉時,會自動調用stop()方法。通常在該方法中加入一些暫停動作,例如暫停音樂或動畫的播放,以便用戶從其他Web頁面切換回包含該Applet的頁面時,可以通過調用start()方法繼續播放下去。●publicvoiddestroy()

用戶關閉流覽器時,必須終止Applet的運行,並回收資源。此時,destroy()方法會自動被調用。該方法是Applet在生存期中執行的最後一個方法,所以通常在這裏釋放一些在init()中分配的資源,如創建的線程等。流覽器在調用destory()方法時,會先調用一次stop()方法。●publicAudioClipgetAudioClip(URLurl)

返回由參數url所指定的AudioClip對象。AudioClip是一個音頻剪輯對象的介面,它提供了音頻對象的抽象控制。無論url指定的音樂檔是否存在,getAudioClip()方法都會很快返回值,因為音頻檔要等到播放的時候才下載。url參數指定的必須是一個絕對地址。●publicURLgetCodeBase()

返回Applet所在網址。●publicURLgetDocumentBase()

返回包含該Applet對象的Web頁面的地址。●publicImagegetImage(URLurl)

返回參數url所指定的圖片檔的Image對象。和getAudioClip()方法類似,不管指定地址的檔是否存在,getImage()方法都會立即返回值。圖片檔在Applet顯示在螢幕上時才會下載。url參數指定的必須是一個絕對地址。●publicStringgetParameter(Stringname)

返回由HTML檔所提供的參數資訊。Applet提供了從Web頁面檔中提取參數的方法,可以在HTML檔中通過<param>標記設置一些參數供Applet使用,例如有如下的HTML代碼:<appletcode="Clock"width=50height=50> <paramname=Colorvalue="blue"></applet>

調用"getParameter("Color")"將返回"blue"。注意參數名是不區分大小寫的。●publicBooleanisActive()

檢查Applet是否處於活動狀態。當流覽器調用start()方法時,Applet即進入活動狀態,而一旦stop()方法被調用,即進入非活動狀態。●publicvoidplay(URLurl)

播放由參數url指定的音頻剪輯,如果該音頻剪輯不存在,則不做任何事情。url參數指定的必須是一個絕對地址●publicvoidshowStatus(Stringmsg)

在流覽器的狀態欄上顯示由參數msg指定的文字資訊,以便通知用戶Applet的當前狀態。通過第一節的例子,我們已經明白了Applet運行的方式和它的生命週期。下麵我們通過實例來學習如何運用以上方法寫出有趣的Applet。例12.3ShowImageApplet.javaimportjava.applet.*;importjava.awt.*;import.*;publicclassShowImageAppletextendsApplet{ StringImageName=null; StringAudioName=null; Imageimg=null; AudioClipaudio=null;publicvoidinit() { ImageName=getParameter("image"); img=getImage(getDocumentBase(),ImageName); AudioName=getParameter("audio"); audio=getAudioClip(getDocumentBase(),AudioName); } publicvoidstart() { audio.play(); }publicvoidpaint(Graphicsg) { g.drawImage(img,0,0,this); } }ShowImageApplet.html<html><body><appletname="ImageShower"code=ShowImageApplet.classwidth=200height=100>

<paramname="image"value="getJava.gif"> <paramname="audio"value="windowsstart.wav"></applet></body></html>圖12.4

這個例子展示了如何通過getImage()方法載入一個圖片對象,並將它顯示在流覽器中以及在啟動Applet的時候播放一段音樂。首先,通過getParameter()方法從HTML代碼中提取出參數,即Image和Audio檔的檔案名。然後通過getImage()方法和getAudioClip()方法取得Image和Audio檔的對象。它們包括兩個參數,getDocument()返回包含Applet的Web頁所在的地址,第二個參數getJava.gif指定圖片檔案名。最後在start()方法中播放音樂。這樣,Applet每次啟動時都會伴隨著一段音樂。在paint()方法中調用drawImage()方法顯示圖片,運行時圖片getJava.gif和windowsstart.wav兩個檔必須和ShowImageApplet.html檔在同一目錄下,其運行結果如圖12.4所示。

運行結果如圖12.4所示。值的注意的是,如果通過圖片來源地址/getjava/images/getJava_head.gif來構造一個URL對象,並通過getImage()方法載入它的話可能會引發一個訪問違例。這是由於Applet的安全機制。前面已經提到,Applet禁止:包含該Applet的Web頁面所在主機以外的其他任何機器通信。所以無法從其他的URL下載一個資源。12.1.4Applet標記以下為Applet標記的完整句法:<applet>[archive=archiveList]code=appletFile.classwidth=pixelsheight=pixels[codebase=codebaseURL][alt=alternateText][name=appletInstanceName][align=alignment][vspace=pixels][hspace=pixels]>[<paramname=appletAttribute1value=value>][<paramname=appletAttribute2value=value>]...[alternateHTML]</applet>

這些標記的意義如下:●archive=archiveList

這一可選屬性描述了一個或多個含有將被"預裝"的類和其他資源的archives。類的裝載由帶有給定codebase的AppletClassLoader的一個實例來完成。ArchiveList中的archives以逗號(,)分隔。●code=appletFile.class

這是一個必需的屬性,它給定了含有已編譯好的Applet子類的檔案名。也可用package.appletFile.class的格式來表示。注:這個檔與你要裝入的HTML檔的基URL有關,它不能含有路徑名。要改變Applet的基URL,可使用<codebase>。●width=pixelsheight=pixels

這些必需的屬性給出了Applet顯示區域的初始寬度和高度(以像素為單位),不包括Applet所產生的任何窗口或對話框。●codebase=codebaseURL

這一可選屬性指定了Applet的基URL――包含有Applet代碼的目錄。如果這一屬性未指定,則採用文檔的URL。

●alt=alternateText

這一可選屬性指定了當流覽器能讀取Applet標記,但不能執行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)的像素數目。其用法與IMG標記的vspace和hspace屬性相同。●<paramname=appletAttribute1value=value>

這個標記提供了一種可帶有由"外部"指定的數值的Applet,它對一個Java應用程式的作用與命令行參數相同。Applet用getParameter()方法來存取它們的屬性,該方法將在稍後作更詳細的討論。不支持Java程式執行的流覽器將顯示被包括在<applet>和</applet>標記之間的任何常規的HTML;而可支持Java技術的流覽器則忽略介於這兩個標記之間的HTML代碼。12.1.5從Applet中彈出窗口有時候我們可能覺得流覽器的介面不利於佈局管理,一個浮在頂端的窗口或對話框更能引人注目。實際上,確實可以從Applet程式中彈出一個如同應用程式一般的窗口來。這有時也有利於我們將現成的應用程式轉成小應用程式,如果我們只是僅僅想它通過流覽器下載運行,而不需要做太多功能上的調整,從Applet程式中彈出一個窗口也許是個好的解決辦法,也就是給它披上一個Applet的外殼。下麵這個例子是一個小型的計算器的程式,它通過Applet的一個按鍵彈出一個Frame,而計算器功能的實現都在Frame中。Applet的功能僅僅是從流覽器啟動它,僅僅是它的一層外殼。例12.4CalculatorApplet.javaimportjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassCalculatorAppletextendsApplet implementsActionListener{ //彈出的窗口

privateFramecalcFrame=newCalculatorFrame(); publicvoidinit(){ //彈出的按鍵

ButtoncalcButton=newButton("Calculator"); calcButton.addActionListener(this); add(calcButton); } publicvoidactionPerformed(ActionEventevt) { //彈出窗口如果沒有被顯示,則顯示它,否則關閉它

if(calcFrame.isVisible()) calcFrame.setVisible(false);else calcFrame.setVisible(true); }} classCalculatorFrameextendsFrame implementsActionListener{ privateTextFielddisplay=null; privatedoublearg1=0; privateStringBufferarg2=newStringBuffer(); privatecharop='=';publicCalculatorFrame() { setTitle("Calculator"); setSize(200,200); setLayout(newBorderLayout()); //輸出窗口

display=newTextField("0"); display.setEditable(false); add(display,"North"); //數字按鍵盤

Panelkeypad=newPanel();Panelkeypad=newPanel(); keypad.setLayout(newGridLayout(4,4)); //添加數字和運算符按鍵

Stringkeys="789/456*123-0.=+"; for(inti=0;i<keys.length();i++) { Buttonbtn=newButton(keys.substring(i,i+1)); keypad.add(btn);//為按鍵添加事件監聽器

btn.addActionListener(this); } add(keypad,"Center");}

publicvoidactionPerformed(ActionEventevt) { //回應按鍵,如果是數字則連接到StringBuffer中,

//如果是運算符則進行運算。

Stringkey=evt.getActionCommand(); charc=key.charAt(0); if((c>='0'&&c<='9')||c=='.'|| (c=='-'&&arg2.length()==0)) { arg2.append(c); display.setText(arg2.toString());}

else { calculate(Double.parseDouble(arg2.toString())); op=c; arg2.setLength(0); if(c=='=') arg2.append(arg1); } } publicvoidcalculate(doublearg2) {//計算

switch(op) { case'+':arg1+=arg2;break; case'-':arg1-=arg2;break; case'*':arg1*=arg2;break; case'/':arg1/=arg2;break; case'=':arg1=arg2;break; default:break;

}

display.setText(""+arg1); }}

這個窗口是一個功能簡陋的計算器面板。由於只需給它配上最簡單的HTML代碼,所以這裏不再列出。圖12.5是該程式的運行結果。

圖12.5

彈出窗口Applet

我們注意到,在彈出窗口的最底下有一行字"JavaAppletWindow",這是對這個窗口的一個說明,也是所有流覽器都具備的一個安全特性。它提示用戶這是一個由運行於流覽器的Applet彈出的窗口,而不是從機器上運行的一個程式。試想如你運行了一個惡意的Applet程式,它可能會彈出一個窗口,這個窗口與你本地某個需要輸入帳號、密碼的應用程式有著相同的介面,也許你會被它蒙蔽而錯誤性的輸入了資訊,這個Applet就會把這些資訊送回主機。

為了避免這種惡作劇出現,所有的彈出窗口都在底端顯示一個標籤,警告用戶這是一個小應用程式,而不是本地應用程式。當然,如果你製作一個簽名的小應用程式並得到了用戶的信任,則可以不顯示這個警告標籤。值的一題的是,正如前面所說,這個小應用程式只是通過Applet來啟動了一個彈出窗口,如果在CalculatorApplet類中為它加入一個mian()方法的話,它就可以同時作為Applet和應用程式來運行,大家可以自己試試。12.1.6基於Swing與AWT的Applet的區別我們已經知道,Applet類是從AWT包中的Panel類派生的,而Java2提供的新一代GUI設計包Swing也提供了支持Applet設計的類:javax.swing.Japplet。注意,JApplet類並不是從JPanel類派生的,而是直接從java.applet.Applet類派生出來的。用AWT設計小應用程式時,我們從java.applet.Applet類派生一個子類,現在為了使用Swing包,就必須從avax.swing.JApplet類派生子類。讓我們先來看一個基於JApplet類的小應用程式的實例,然後再分析二者的區別。例12.5JAppletTest.javaimportjava.awt.*;importjavax.swing.*;publicclassJAppletTestextendsJApplet{ privateJMenuBarmenuBar=newJMenuBar(); publicvoidinit() {ContainercontentPane=getContentPane(); Imageimg=getImage(getDocumentBase(), "getJava.GIF"); Iconicon=newImageIcon( getImage(getDocumentBase(),"getJava.GIF")); JLabellabel=newJLabel("Swing!",icon,SwingConstants.CENTER);

contentPane.add(label,BorderLayout.CENTER); JMenufileMenu=newJMenu("File"); String[]fileItems={"New","Open","Save","Exit"}; for(inti=0;i<fileItems.length;i++) fileMenu.add(fileItems[i]); JMenuhelpMenu=newJMenu("Help"); String[]helpItems={"Helpofhelp","About"}; for(inti=0;i<helpItems.length;i++) helpMenu.add(helpItems[i]);

menuBar.add(fileMenu); menuBar.add(helpMenu); setJMenuBar(menuBar); }}

該程式的運行結果如圖12.6所示。在該程式中,為小應用程式加入了一個菜單條,這也是基於Swing的小應用程式的一種新特性。圖12.6

從上面的例子來看,基於Swing的小應用程式和基於AWT的小應用程式在架構上沒有什麼分別,它們的生存方式也是相同的,所以上述例子中也沒有給出start(),stop(),destory()這些方法,而是使用了默認的方法,但是,有幾點需要注意:

(1)JApplet類默認使用BorderLayout作為其容器的佈局管理器,其默認約束條件是BordenLayout.CENTER,而Applet的缺省的佈局管理器是FlowLayout,且FlowLayout的缺省約束條件是FlowLayout.LEFT,這是二者最顯著的區別之一。(2)JApplet是只包含一個組件的容器,這個組件就是JRootPane的一個實例,而JRootPane包含了一個稱作內容窗格的容器。

(3)"內容窗格"包含與特定的小應用程式有關的所有內容,可通過getContentPane()方法獲得。即是說,小應用程式必須把所有的組件添加到內容窗格中,而Applet則是把它們直接添加到小應用程式中。

(4)我們不能直接為小應用程式設置佈局管理器,而只能對它的內容窗格設置佈局管理。

(5)JApplet的實例可以有一個菜單欄,它是由setJMenuBar()方法指定的,而AWT小應用程式卻不能。

基於Swing的小應用程式比基於AWT的小應用程式有更多的優勢,它可以使用Swing提供的更多介面元素和性能。但是它也有一個很大的缺陷,那就是很多流覽器都不能支持Swing編寫的小應用程式,而必須依靠安裝JavaPlug-in包。雖然可以讓流覽器在運行Swing小應用程式時自動下載這個包,但是由於JavaPlug-in包並不小,所以對於非寬頻上網的用戶來說是不可忍受的。12.2Applet的通信12.2.1Applet與流覽器的通信我們已經學習過如何通過getParameter()方法從流覽器的Web頁中獲取資訊,同時,Applet也可以要求流覽器為自己做事,例如我們可以讓流覽器打開一個指定的Web頁。為了與流覽器通信,需調用Applet的getAppletContext()方法。這個方法返回一個實現了AppletContext介面的對象,這個介面是實現Applet和流覽器通信的一座橋樑。

除了getAudioClip()和getImage()外,AppletContext介面還提供了四個有用的方法,它們是get-Applet()、getStream()、showDocument()和showStatus(),我們將在本節和下麵的小節中講述它們的用法。在小應用程式中可以訪問流覽器的兩個區:狀態行和頁面顯示區,但都必須通過調用AppletContext介面中的方法來實現。通過調用showStatus(Stringstatus)方法,可以在流覽器底部的狀態行中顯示一行字串提示資訊,例如:

showStatus("LoadingData…pleasewait");

但是,遺憾的是,使用showStatus()顯示提示資訊的功能很有限,因為流覽器自己也在使用狀態行,而且經常使用。它總是用新的提示資訊改寫前一次的資訊,用戶往往無法注意到某一條資訊,所以不能用該方法來顯示一些重要資訊。在流覽器頁面顯示區顯示資訊的方法是showDocument(),它可以通知流覽器打開一個指定的URL資源。showDocument()方法的定義如下:

showDocument(URLurl);

showDocument(URLurl,Stringtarget);

第一種格式的調用可以讓流覽器直接打開一個新的URL資源,並將它顯示在當前流覽器顯示區中,替換原來顯示的Web頁面。第二種格式的調用多了一個String類型的參數,第一個參數依然是指定要顯示的URL資源,第二個參數則用於指明流覽器打開頁面的方式。如果指定值為"_blank",流覽器就會另外打開一個新窗口,在新的流覽器窗口中顯示指定的Web頁。如果使用HTML3.2以上版本提供的幀特性,則可以將一個流覽器的窗口分成多個幀,並給每個幀指定一個名字。用戶可以把自己的Applet放入一個幀中,並利用它來控制其他幀的頁面顯示。表12.2展示了可以用作ShowDocument()方法的第二個參數的所有字串及其功能。表12.2showDocument參數showDocument()的兩個參數位置“_self”或無顯示在當前幀內“_parent”顯示在父容器幀內“_top”顯示在頂層幀內“_blank”顯示在一個新打開的流覽器窗口中其他字元顯示在該字串指定名的幀內,如果沒有該幀,就打開一個新窗口顯示,並把這個名稱指定給他例12.6Bookmark.javaimportjava.applet.*;importjava.awt.*;importjava.awt.event.*;import.*;publicclassBookmarkextendsApplet implementsItemListener{

}

publicvoiditemStateChanged(ItemEventevt) { Listsource=(List)evt.getSource(); Stringlink=source.getSelectedItem(); try { AppletContextcontext=getAppletContext(); URLurl=newURL(link); context.showDocument(url,"right");}

catch(Exceptione) { showStatus("Error"+e); } }}Bookmark.html<html><head><title>BookmarkApplet</title><head><framesetcols="300,*"> <framename="left"src="left.html"> <framename="right"></frameset><html>//Left.html<html><title>ABookmarApplet</title><body><Appletcode="Bookmark.class"width=250height=200><paramname=link1value="/"><paramname=link2value="http://www.szptt.net.cn/"><paramname=link3value="/"><paramname=link4value="/"><paramname=link5value=".cn/"></applet></body><html>

這個小應用程式利用了HTML3.2以上版本的窗口分幀的特性,將流覽器的頁面顯示區垂直地分成了兩個幀。左邊的幀包含了上面的Bookmark小應用程式,它在一個列表框中列出了一列網址。點擊其中任何一個網址,就會在右邊的幀中顯示出相應的Web頁來。這個功能類似收藏夾的小應用程式在流覽器中運行,結果如圖12.7所示。圖12.712.2.2同頁Applet之間的通信我們已經學習了如何在一個Web頁面中嵌入Applet,實際上,完全可以在同一個Web頁上嵌入一個以上的小應用程式,甚至還可以讓這些Applet互相通信,互相控制。要實現Web頁中的不同Applet之間的通信,這些Applet的codebase必須是相同的,即它們的class檔放在伺服器上的同一路徑下。Applet之前的通信是一個高級技巧。我們還記得在嵌入小應用程式的<applet>標記中有一個name參數,我們可以通過這個參數為嵌入的小應用程式賦予一個名字。然後調用AppletContext介面的getApplet()方法,獲得對這個小應用程式的一個引用。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論