雖然 Applet 已被淘汰,但其事件處理模型仍是理解 Java GUI 程式設計的經典教材。本文解析一個簡易滑鼠追蹤程式,展示 mouseDown、paint、update 協作流程。
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Color;
public class MouseTracker extends java.applet.Applet {
int clickCount = 0;
int lastX, lastY;
public boolean mouseDown(Event evt, int x, int y) {
lastX = x;
lastY = y;
clickCount++;
repaint(); // 觸發 update() -> paint()
return true; // 表示事件已消費
}
public void update(Graphics g) {
// 雙緩衝雛形:先清背景再呼叫 paint()
g.setColor(getBackground());
g.fillRect(10, 300, 200, 60);
paint(g);
}
public void paint(Graphics g) {
g.setColor(Color.green);
g.drawString("目前滑鼠座標 (" + lastX + "," + lastY + ")", 10, 300);
g.drawString("This is No." + clickCount + " point", 10, 340);
g.setColor(Color.red);
// 畫紅色叉號標示點擊位置
g.drawLine(lastX - 5, lastY - 5, lastX + 5, lastY + 5);
g.drawLine(lastX + 5, lastY - 5, lastX - 5, lastY + 5);
}
}
<html>
<body>
<applet code="MouseTracker.class" width=300 height=350></applet>
</body>
</html>
mouseDown(Event, x, y)。repaint() 排程 update(),預設 update() 清背景後呼叫 paint()。paint() 讀取最新狀態繪製文字與圖形。| Applet 1.0 | Swing / JavaFX 現代寫法 |
|---|---|
mouseDown(Event, x, y) | addMouseListener(e -> { ... }) (Lambda) |
repaint() + update/paint | Swing 自動雙緩衝;JavaFX 場景圖自動重繪 |
Graphics 立即模式 | Swing 仍用 Graphics2D;JavaFX 用保留模式節點 |
雖然 Applet 已退役,但「事件 → 狀態 → 重繪」的 MVC 雛形思維至今仍通用於所有 GUI 框架。