Applet 嵌入 HTML 頁面,由容器(AppletViewer 或瀏覽器)載入並控制執行。瀏覽器建立 Applet 類別實例後,透過五個 public void 方法控制生命週期:
init() 後首次呼叫;使用者離開頁面再返回時也會呼叫。啟動執行緒、動畫等資源。init() 結束、start() 啟動後呼叫;視窗遮蔽後重繪也會呼叫。使用容器傳入的 Graphics 物件繪圖。start() 中啟動的所有作業。stop()。paint(Graphics g) 的 g 由容器傳入,不可自行實例化。
public void paint(Graphics g) {
super.paint(g); // 良好習慣,複雜 Applet 避免嚴重錯誤
g.drawString("Java Applet", 25, 25);
}
原點在左上角,單位為像素。
drawString 不支援 \n 換行,會顯示未知字元或無輸出。需自行計算座標分行繪製。
Image 為抽象類別,不可直接實例化。需呼叫 getImage(url, name) 由容器載入:
Image logo = getImage(getDocumentBase(), "logo.jpg");
repaint() 預設清除背景再呼叫 paint(),間隙造成閃爍。兩種改善方式:
update() 清背景再呼叫 paint()。覆寫後將繪圖邏輯移入 update(),避免重複清背景。createImage()),取得其 Graphics 離岸繪圖,完成後一次 drawImage() 繪至螢幕。大幅減少閃爍與影像遺失。最佳實踐:paint() 僅呼叫 update(),所有繪圖在離岸緩衝區完成,最後一次性輸出。
JDK 安裝目錄下的 demo/applet 含豐富經典原始碼:3D 圖形、動畫、時鐘等,親自執行研究是最佳學習途徑。
隨著 Flash 流行,Applet 已退出網頁動畫舞台。現主要用於:
此類場景利用 Applet 的 JVM 功能與本地運算能力,為純 Web 技術難以企及。