首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 經典範例 075:Applet 鍵盤事件監聽與字符顯示

     編輯:Java 程式設計入門

範例目標

示範在 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` 中需要者
字符累加示範簡單字符串拼接;實際編輯器需處理退格、游標、組合鍵等

常見問題與修正

  • 原碼 `text = s+=e.getKeyChar();` 錯誤:`s` 未初始化且邏輯混亂。修正為 `text += e.getKeyChar();`。
  • `paint` 中 `height/2, width/2` 參數顛倒:`drawString(x, y)` 對應 `width` 為 x 軸,`height` 為 y 軸。

現代化遷移 (Swing)

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 按鍵碼」區別,為自定義元件開發打基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved