詳細步驟
例行說明
- 有了 104 個按鈕後,就需要綁定鍵盤上的按鍵,使其一一對應
那問題來了,怎麼做 按鍵綁定 呢?實際上鍵盤上的每個按鍵都有一個特定的值(vkCode
),所以在做綁定之前,是不是應該把這些 識別碼 給找出來呀!
單純知道這些值並沒有什麼卵用,將其成員化爲我所用纔是硬道理,所以該版本主要做的就是對vkCode
的獲取及其成員化
具體步驟
-
呃,copy 代碼 (⊙﹏⊙) img1
如果想要學習正規的偷懶方式,請見 Option1
說白了,什麼粗活髒活累活全交給機器做,機器做得不合格的再做處理
但其實直接 copy 源代更直接些,只不過這裏介紹個偷懶的辦法而已(●ω●) -
之所以選了
vkCode
而不用KeyEvent
,原因可見 Option2 & Option3 -
vkCode
的詳細介紹請見文末的相關鏈接
總的而言它可以識別鍵盤上絕大多數的按鍵,爲什麼說是絕大多數,因爲 Fn 就沒有 (  ̄﹏ ̄;)
所以這裏 Fn 初始值爲 -1,表示啥也不是。。。
這算是美中不足吧,不過這並不妨礙後續開發,所以無傷大雅 -
img1
Options
Option1
- [vkCode 變量及其初始化(正解)] 注: 這裏用到下一個版本的內容
KeyboardHook
KeyboardPiano
中弄個內部類,如KeyAdapter implements KeyListener
=>
@Override keyPressed(KeyEvent e)
=>
String keyName = KeyEvent.getKeyText(e.getKeyCode())
獲取按鍵名稱,作爲變量名KeyboardHook
=>WinUser.LowLevelKeyboardProc
=>callback()
在該回調函數(C++ 的稱呼,後續版本有詳細介紹)中獲取按鍵的vkCode
,並初始化KeyAdapter
中輸出的變量- 詳細過程及其輸出示例見此鏈接:keyPressed & callback 前方又一次英語預警(@_@)
Option2
- [爲何要用 vkCode]
- 之所以費這麼大勁,放着
java
自帶的鍵盤監聽類不用(詳見 Option1),非得透過外包接口訪問系統獲取信息(Windows DDL),其主要原因還不是爲了好用,不僅功能強大而且對後續開發有積極的影響(比如說,監聽按鍵,關聯按鈕,屏蔽系統按鍵,etc) - 更何況導入幾個外包也不是什麼難事,最重要還是能簡單有效地把功能實現,其他的都好談嘛(∩ω∩)
- 之所以費這麼大勁,放着
Option3
- [KeyEvent 的不足之處]
- 起初博主使用
KeyListener
對鍵盤進行監聽,原理就是系統把鍵盤的信息扔給KeyEvent
,從而通過KeyEvent
進行相應的處理 - 但是
java
自帶的鍵盤監聽接口功能有限,鍵盤中重複的鍵不能區分,比如說,L & R Ctrl, Alt, Shift
可能也是博主沒有對該接口(以及其實現類?)進行深入學習,所以用起來感覺一般(有待商榷) - 不過該接口也不是說沒有用,後面測試的時候還有用處,比如說 Option1
- 起初博主使用