此 Applet 示範實作 KeyListener 介面,即時捕獲鍵盤輸入並顯示對應的 ASCII/Unicode 數值。適用於鍵碼對照測試、輸入法開發除錯等場景。
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class KeyValueApplet extends Applet implements KeyListener {
TextField inputField = new TextField(10);
Label asciiLabel = new Label("鍵盤對應 ASCII 碼");
public void init() {
setLayout(new FlowLayout());
add(inputField);
add(asciiLabel);
inputField.addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
char ch = e.getKeyChar();
int code = (int) ch;
asciiLabel.setText(String.valueOf(code));
inputField.setText("");
inputField.requestFocus();
}
public void keyTyped(KeyEvent e) {
// 可在此處理 Enter 等特殊鍵
// 原始碼註解區塊示範 Enter(10) 觸發特定邏輯
}
public void keyReleased(KeyEvent e) { /* 不處理 */ }
}
| 方法 | 觸發時機 | 典型用途 |
|---|---|---|
| keyPressed | 按鍵按下瞬間 | 遊戲控制、熱鍵偵測、非字元鍵 (F1、Ctrl 等) |
| keyReleased | 按鍵釋放瞬間 | 按鍵組合判斷、長按偵測 |
| keyTyped | 產生字元時 | 文字輸入處理、字元過濾、已包含修飾鍵效果 |
注意:keyTyped 不會為非字元鍵(功能鍵、修飾鍵、方向鍵)觸發。
int keyCode = e.getKeyCode(); // 虛擬鍵碼 (VK_ENTER, VK_A, VK_SHIFT...)
char keyChar = e.getKeyChar(); // 實際字元 (含 Shift 等修飾鍵效果)
int modifiers = e.getModifiersEx(); // 修飾鍵狀態 (SHIFT_DOWN, CTRL_DOWN...)
<html>
<body>
<applet code="KeyValueApplet.class" width="300" height="100">
<param name="permissions" value="sandbox">
</applet>
<!-- 或使用 appletviewer 測試:
appletviewer KeyValueApplet.java -->
</body>
</html>
Applet 技術已淘汰,建議改用:
TextField.setOnKeyPressed()、KeyEvent.getCode()JTextField.addKeyListener() (同 AWT API)input.addEventListener('keydown', e => console.log(e.key, e.code))| 問題 | 原因 | 解決 |
|---|---|---|
| 無法獲得焦點 | Applet 初始化未請求焦點 | inputField.requestFocusInWindow() 或滑鼠點擊 |
| 中文輸入法干擾 | 組合字過程觸發多次事件 | 使用 keyTyped 只處理最終字元、或監聽 InputMethodEvent |
| 數字鍵盤編碼不同 | NumLock 狀態影響 keyCode | 優先使用 getKeyChar() 取得字元 |