HOWTO · Java

在 Java 中使用鍵碼

本文重點介紹如何在 Java 中使用鍵碼。

本頁內容

今天我們將研究代表鍵盤上按鍵的按鍵程式碼。鍵碼是分配給 KeyEvent 物件的整數程式碼。

在 Java 中使用 KeyListener來監聽按鍵程式碼

在此示例中,我們建立一個框架並在其底部新增一個帶有兩個標籤的輸入欄位。當我們在該欄位中輸入鍵盤上的任何鍵時,標籤將提供有關鍵的一些資訊。

在下面的程式中,我們建立了一個類 JavaKeycodeExample,它擴充套件了 Frame 類並實現了 KeyListener 介面。Frame 類為我們提供了一個放置輸入欄位和標籤的視窗,而在 KeyListener 介面的幫助下,我們可以覆蓋它的三個方法來幫助我們識別關鍵事件。

在 JavaKeycodeExample 類中,我們建立了兩個標籤 label1 和 label2,以及一個接受輸入的文字欄位 textField。我們初始化並設定 AWT 元件的大小以將它們新增到 Frame。

我們使用 addKeyListener() 將 KeyListener 新增到 textField。我們實現了 KeyListener 介面,因此我們必須重寫它的三個方法,即記錄按下的鍵的 keyPressed(),識別鍵入的鍵的 keyTyped(),以及呼叫最後一個方法 keyReleased() 當按下的鍵被釋放時。

對於這個例子,我們主要使用 keyPressed() 方法,只要在輸入欄位中按下一個鍵,它就會接收一個 KeyEvent 物件 e。要按下鍵碼,我們使用 KeyEvent 物件呼叫 getKeyCode() 方法並將結果與​​字串連線。

我們還使用方法 KeyEvent.getKeyText() 獲取表示鍵程式碼的文字並傳遞 e.getKeyCode()。最後,我們將兩個字串都設定為標籤 label1 和 label2。

在輸出中,我們可以觀察到我們在文字欄位中按下了鍵盤上的鍵 k;第一個標籤列印鍵程式碼,而第二個標籤顯示鍵文字。

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class JavaKeycodeExample extends Frame implements KeyListener {
  Label label1;
  Label label2;
  TextField textField;

  public JavaKeycodeExample() {
    label1 = new Label();
    label1.setBounds(120, 220, 200, 20);

    label2 = new Label();
    label2.setBounds(120, 250, 200, 20);

    textField = new TextField();
    textField.setBounds(100, 100, 200, 100);
    textField.addKeyListener(this);

    add(label1);
    add(label2);
    add(textField);
    setSize(350, 350);
    setLayout(null);
    setVisible(true);
  }

  public void keyPressed(KeyEvent e) {
    String keyCodeString = "Last Key Code Pressed : " + e.getKeyCode();
    String keyCodeAsTextString = "You pressed : " + KeyEvent.getKeyText(e.getKeyCode());
    label1.setText(keyCodeString);
    label2.setText(keyCodeAsTextString);
  }

  @Override
  public void keyTyped(KeyEvent e) {}

  @Override
  public void keyReleased(KeyEvent e) {}

  public static void main(String[] args) {
    new JavaKeycodeExample();
  }
}

輸出:

java 鍵碼

在 Java 中使用 KeyEvent.getKeyText() 列印鍵程式碼及其文字描述

有很多鍵碼代表鍵盤上的按鍵,在這個程式中,我們列印了其中的一些。我們使用從 0 開始並執行到 50 的 for 迴圈獲取關鍵程式碼和描述它的關鍵文字。

在迴圈中,迴圈的每個值都可能是一個鍵碼,我們使用函式 KeyEvent.getKeyText() 獲取鍵文字並傳遞鍵碼值。

請注意,並非每個整數值都代表一個鍵碼,並且可能返回一個鍵文字 Unknown keyCode;因此,我們檢查字串 keyCodeText 是否包含文字。如果它是有效的鍵碼,它會列印鍵碼和鍵碼文字。

在輸出中,我們觀察到箭頭的左側是鍵碼,箭頭的右側是鍵碼的文字描述。

import java.awt.event.KeyEvent;

public class JavaKeycodeExample {
  public static void main(String[] args) {
    for (int keyCode = 0; keyCode < 50; ++keyCode) {
      String keyCodeText = KeyEvent.getKeyText(keyCode);
      if (!keyCodeText.contains("Unknown keyCode")) {
        System.out.println(keyCode + " ---> " + keyCodeText);
      }
    }
  }
}

輸出:

3 ---> Cancel
8 ---> Backspace
9 ---> Tab
10 ---> Enter
12 ---> Clear
16 ---> Shift
17 ---> Ctrl
18 ---> Alt
19 ---> Pause
20 ---> Caps Lock
21 ---> Kana
24 ---> Final
25 ---> Kanji
27 ---> Escape
28 ---> Convert
29 ---> No Convert
30 ---> Accept
31 ---> Mode Change
32 ---> Space
33 ---> Page Up
34 ---> Page Down
35 ---> End
36 ---> Home
37 ---> Left
38 ---> Up
39 ---> Right
40 ---> Down
44 ---> Comma
45 ---> Minus
46 ---> Period
47 ---> Slash
48 ---> 0
49 ---> 1