【Java入門】鍵盤監聽器KeyListener

概述

KeyListener是用於接收鍵盤事件(擊鍵)的監聽器接口。

使用組件的 addKeyListener 方法將從該類所創建的偵聽器對象向該組件註冊。按下、釋放或鍵入鍵時生成鍵盤事件。然後調用偵聽器對象中的相關方法並將該 KeyEvent 傳遞給它。

方法

該接口的3個方法
void keyPressed(KeyEvent e) // 按下某個鍵時調用此方法。
void keyReleased(KeyEvent e) // 釋放某個鍵時調用此方法。
void keyTyped(KeyEvent e) // 鍵入某個鍵時調用此方法。

KeyEvent

表示組件中發生鍵擊的事件。

當按下、釋放或鍵入某個鍵時,組件對象將生成此低級別事件。該事件被傳遞給每一個 KeyListener 或 KeyAdapter 對象。

主要用到的方法:
public int getKeyCode() // 返回與此事件中的鍵關聯的整數 keyCode。
public char getKeyChar() // 返回與此事件中的鍵關聯的字符

keyCode是一個整數,代表了這個鍵的編碼。
keyChar是指這個鍵的值,例如某個字母、某個數字、某個符號。

一個keyCode不一定只對應一個按鍵,keyChar也不一定只對應一個按鍵。
例如,鍵盤上方的數字跟小鍵盤的數字,它們的keyChar相同,但是keyCode不一樣。
再例如,左邊的shift、ctrl和右邊的shift、ctrl,keyCode和keyChar都是一樣的(要區分就用getKeyLocation方法)。

詳細每個鍵對應的keyCode可以看看這篇博客: https://blog.csdn.net/KIG_cat/article/details/50676885

如何使用

首先用一個監聽器類實現KeyListener接口,然後創建對象,在組件上用addKeyListener方法添加監聽器。
但是我一開始嘗試在JPanel上添加這個監聽器對象之後,沒有報錯,但實際按下鍵盤卻沒有反應。百度了一下,發現還漏了一步,就是要讓組件獲得焦點
所以還要在JFrame設置可見之後,讓JPanel獲得焦點,可以用 void requestFocus() 方法:請求此 Component 獲取輸入焦點,並且此 Component 的頂層祖先成爲獲得焦點的 Window。也可以使用 requestFocusInWindow 方法:如果此 Component 的頂層祖先已經是獲得焦點的 Window,則請求此 Component 獲取輸入焦點。更推薦後者,因爲可在各種平臺之間一致地實現此方法的焦點行爲。

frame.setVisible(true);   //要在這一步之後。。。
// ......
mainPanel.addKeyListener(listener);   //添加按鍵監聽器
mainPanel.requestFocusInWindow();     //獲得焦點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章