庫通常按照它們的功能來進行組合。一些庫,例如使用過的,便中斷擱置起來。標準的Java庫字串和向量類就是這樣的一個例子。其他的庫被特殊地設計,例如構建塊去建立其它的庫。庫中的某些類是應用程式的架構,其目的是協助我們構建應用程式,在提供類或類集的情況下產生每個特定應用程式的基本活動狀況。然後,為我們定製活動狀況,必須繼承應用程式類並且廢棄程式的權益。應用程式架構的預設控制結構將在特定的時間調用我們廢棄的程式。應用程式的架構是“分離、改變和中止事件”的好例子,因為它總是努力去嘗試集中在被廢棄的所有特殊程式段。
程式片利用應用程式架構來建立。我們從類中繼承程式片,並且廢棄特定的程式。大多數時間我們必須考慮一些不得不啟動並執行使程式片在WEB頁面上建立和使用的重要方法。這些方法是:
| Method |
Operation |
| init() |
Called when the applet is first created to perform first-time initialization of the applet |
| start() |
Called every time the applet moves into sight on the Web browser to allow the applet to start up its normal operations (especially those that are shut off by stop()). Also called after init(). |
| paint() |
Part of the base class Component (three levels of inheritance up). Called as part of an update() to perform special painting on the canvas of an applet. |
| stop() |
Called every time the applet moves out of sight on the Web browser to allow the applet to shut off expensive operations. Also called right before destroy(). |
| destroy() |
Called when the applet is being unloaded from the page to perform final release of resources when the applet is no longer used |
方法 作用
init() 程式片第一次被建立,初次運行初始化程式片時調用
start() 每當程式片進入Web瀏覽器中,並且允許程式片啟動它的常規操作時調用(特殊的程式片被stop()關閉);同樣在init()後調用
paint() 基礎類Component的一部分(繼承結構中上溯三級)。作為update()的一部分調用,以便對程式片的畫布進行特殊的描繪
stop() 每次程式片從Web瀏覽器的視線中離開時調用,使程式片能關閉代價高昂的操作;同樣在調用destroy()前調用
destroy() 程式片不再需要,將它從頁面中卸載時調用,以執行資源的最後清除工作
現在來看一看paint()方法。一旦Component(目前是程式片)決定自己需要更新,就會調用這個方法——可能是由於它再次迴轉螢幕,首次在螢幕上顯示,或者是由於其他視窗臨時覆蓋了你的Web瀏覽器。此時程式片會調用它的update()方法(在基礎類Component中定義),該方法會恢複一切該恢複的東西,而調用paint()正是這個過程的一部分。沒必要對paint()進行過載處理,但構建一個簡單的程式片無疑是方便的方法,所以我們首先從paint()方法開始。
update()調用paint()時,會向其傳遞指向Graphics對象的一個控制代碼,那個對象代表準備在上面描繪(作圖)的表面。這是非常重要的,因為我們受到項目組件的外觀的限制,因此不能畫到地區外,這可是一件好事,否則我們就會畫到線外去。在程式片的例子中,程式片的外觀就是這界定的地區。
繪圖物件同樣有一系列我們可對其進行的操作。這些操作都與在畫布上作圖有關。所以其中的大部分都要涉及映像、幾何菜狀、圓弧等等的描繪(注意如果有興趣,可在Java文檔中找到更詳細的說明)。有些方法允許我們畫出字元,而其中最常用的就是drawString()。對於它,需指出自己想描繪的String(字串),並指定它在程式片作圖地區的起點。這個位置用像素表示,所以它在不同的機器上看起來是不同的,但至少是可以移植的。
根據這些資訊即可建立一個簡單的程式片:
//: Applet1.java// Very simple appletpackage c13;import java.awt.*;import java.applet.*;public class Applet1 extends Applet { public void paint(Graphics g) { g.drawString("First applet", 10, 10); }} ///:~
注意這個程式片不需要有一個main()。所有內容都封裝到應用程式架構中;我們將所有啟動代碼都放在init()裡。
必須將這個程式放到一個Web頁中才能運行,而只能在支援Java的Web瀏覽器中才能看到此頁。為了將一個程式片置入Web頁,需要在那個Web頁的代碼中設定一個特殊的標記(注釋①),以指示網頁裝載和運行程式片。這就是applet標記,它在Applet1中的樣子如下:
<appletcode=Applet1width=200height=200></applet>
①:本書假定讀者已掌握了HTML的基本知識。這些知識不難學習,有許多書籍和網上資源都可以提供協助。
其中,code值指定了.class檔案的名字,程式片就駐留在那個檔案中。width和height指定這個程式片的初始尺寸(如前所述,以像素為單位)。還可將另一些東西放入applet標記:用於在網際網路上尋找其他.class檔案的位置(codebase)、對齊和排列資訊(align)、使程式片相互間能夠通訊的一個特殊標識符(name)以及用於提供者片能接收的資訊的參數。參數採取下述形式:
<Paramname=標識符 value ="資訊">
可根據需要設定任意多個這樣的參數。
在簡單的程式片中,我們要做的唯一事情是按上述形式在Web頁中設定一個程式片標記(applet),令其裝載和運行程式片。