Java Applet 憑藉其強大的跨平台能力與豐富的圖形界面支持,曾是早期 Web 應用開發的主流技術之一。雖然現代瀏覽器已不再支持 Applet,但其核心編程思想——事件驅動、圖形繪製、網絡通信等——對理解 Java 圖形用戶界面(GUI)開發、Android 早期開發模式以及當前的 JavaFX 依然具有重要的參考價值。本文將系統梳理 Applet 開發中最基礎、最核心的八大技術點,並附帶完整代碼示例,幫助讀者快速掌握 Java 圖形編程的精髓。
文字顯示是所有圖形界面的基礎。在 Applet 中,通過 Graphics 類的 drawString(String str, int x, int y) 方法即可實現。坐標 (x, y) 代表文字基線左下角的位置。
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet {
String text = "Hello World!";
public void paint(Graphics g) {
g.drawString(text, 20, 20); // 在 (20,20) 繪製文字
}
}
關鍵點: Java 內部使用 Unicode(16 位)編碼字符,原生支持中文顯示。若瀏覽器渲染異常,通常是瀏覽器 JDK 版本或字體配置問題,而非代碼錯誤。
Applet 可通過 HTML 頁面的 <param> 標籤接收外部配置,實現邏輯與數據分離。參數讀取應在 init() 生命週期方法中完成。
// ShowText.java
import java.awt.*;
import java.applet.*;
public class ShowText extends Applet {
String text;
public void init() {
text = getParameter("word"); // 讀取參數,不區分大小寫
}
public void paint(Graphics g) {
g.drawString(text, 20, 20);
}
}
<applet code="ShowText.class" width="100" height="28">
<param name="word" value="Hello World!">
</applet>
早期 Applet 使用 Event 模型處理鼠標交互,現代 Java 採用 MouseListener 接口,但理解舊模型有助於閱讀歷史代碼。注意:舊模型不區分鼠標左右鍵。
// Mouse.java
import java.awt.*;
import java.applet.*;
public class Mouse extends Applet {
String text = "";
public void paint(Graphics g) {
g.drawString(text, 20, 20);
}
public boolean mouseDown(Event evt, int x, int y) {
text = "Mouse Down";
repaint(); // 觸發重繪
return true; // 表示事件已處理
}
public boolean mouseUp(Event evt, int x, int y) {
text = "";
repaint();
return true;
}
}
同理,鍵盤交互通過重寫 keyDown、keyUp 實現。參數 int key 為鍵碼,可配合 Event 類常量判斷功能鍵。
// Keyboard.java
import java.awt.*;
import java.applet.*;
public class Keyboard extends Applet {
String text = "";
public void paint(Graphics g) {
g.drawString(text, 20, 20);
}
public boolean keyDown(Event evt, int key) {
text = "Key Down: " + key;
repaint();
return true;
}
public boolean keyUp(Event evt, int key) {
text = "";
repaint();
return true;
}
}
網絡圖像加載是異步的,必須實現 ImageObserver 接口或使用 MediaTracker 監控加載進度,防止繪製時圖像尚未就緒。
// ShowImg.java
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
import java.net.URL;
public class ShowImg extends Applet implements ImageObserver {
Image img;
public void init() {
String imgName = getParameter("imagename");
URL baseURL = getDocumentBase(); // HTML 所在基址
img = getImage(baseURL, imgName); // 異步加載
}
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this); // this 作為 ImageObserver
}
}
支持格式:GIF、JPG。getDocumentBase() 返回 HTML 頁面 URL,getCodeBase() 返回 Applet class 文件 URL。
聲音同樣為異步播放,play() 立即返回,後台線程處理音頻流。常用於遊戲音效、背景音樂。
// Sound.java
import java.awt.*;
import java.applet.*;
import java.net.URL;
public class Sound extends Applet {
String soundName;
public void init() {
soundName = getParameter("soundname");
}
public boolean mouseDown(Event evt, int x, int y) {
play(getDocumentBase(), soundName); // 點擊播放
return true;
}
}
Applet 尺寸由 HTML width/height 屬性決定,程序需動態適配。size() 返回 Dimension 對象,包含 width、height 字段。
// GetSize.java
import java.awt.*;
import java.applet.*;
public class GetSize extends Applet {
Dimension sz;
public void init() {
sz = size(); // 獲取顯示區域大小
}
public void paint(Graphics g) {
g.fillOval(0, 0, sz.width, sz.height); // 繪製填滿區域的橢圓
}
}
顏色管理分為組件級(背景/前景)與畫筆級(Graphics.setColor)。Color 類提供 13 種預定義常量,也支持 RGB 自定義。
// SetColor.java
import java.awt.*;
import java.applet.*;
public class SetColor extends Applet {
public void paint(Graphics g) {
setBackground(Color.blue); // 組件背景色
setForeground(Color.green); // 組件前景色(影響 drawString 等)
g.fillRect(25, 4, 50, 20); // 使用前景色填充矩形
// 畫筆級顏色控制
g.setColor(Color.red);
g.drawString("Red Text", 25, 40);
}
}
init(),啟動在 start(),停止在 stop(),銷毀在 destroy(),繪製在 paint()。ImageObserver 或 MediaTracker 確保就緒後再繪製/播放。java.awt.event 包下的 Listener 接口(MouseListener、KeyListener 等),舊 Event 模型已棄用。雖然 Applet 已退出歷史舞台,但其封裝的 AWT 核心機制——圖形上下文、事件分發、異步資源加載——構成了 Java 客戶端開發的基石。掌握這些技巧,對轉型 JavaFX、Swing 甚至 Android 開發都大有裨益。