示範在 Applet 中註冊 `KeyListener` (透過 `KeyAdapter`),捕捉鍵盤按鍵字符,並以大號字體在畫布中央顯示輸入內容。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class KeyAd extends Applet {
private String text = "";
private int width, height;
@Override
public void init() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if (c != KeyEvent.CHAR_UNDEFINED) { // 過濾非字符鍵 (Shift、Ctrl 等)
text += c;
repaint();
}
}
});
// Applet 需主動請求焦點才能接收鍵盤事件
requestFocus();
}
@Override
public void paint(Graphics g) {
Dimension d = getSize();
g.setFont(new Font("Dialog", Font.BOLD, 80));
// 置中繪製 (簡易版)
g.drawString(text, d.width / 2, d.height / 2);
}
}
| 項目 | 說明 |
|---|---|
| 焦點機制 | Applet 預設無焦點,必須呼叫 `requestFocus()` 或滑鼠點擊後才能接收鍵盤事件 |
| KeyEvent.getKeyChar() | 返回 Unicode 字符;功能鍵 (F1、方向鍵) 返回 `CHAR_UNDEFINED` |
| KeyAdapter | 同 `MouseAdapter`,僅覆寫 `keyPressed`/`keyReleased`/`keyTyped` 中需要者 |
| 字符累加 | 示範簡單字符串拼接;實際編輯器需處理退格、游標、組合鍵等 |
JTextArea area = new JTextArea();
area.setFont(new Font("Dialog", Font.PLAIN, 24));
JFrame f = new JFrame("Key Demo");
f.add(new JScrollPane(area));
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
// JTextArea 內建完整鍵盤處理、游標、選取、複製貼上,無需手寫 KeyListener
教學重點:理解「焦點遍歷」「事件委派」「字符 vs 按鍵碼」區別,為自定義元件開發打基礎。