KeyboardPianoV1.2.2 vkCodes


詳細步驟

例行說明

  • 有了 104 個按鈕後,就需要綁定鍵盤上的按鍵,使其一一對應
    那問題來了,怎麼做 按鍵綁定 呢?實際上鍵盤上的每個按鍵都有一個特定的值(vkCode),所以在做綁定之前,是不是應該把這些 識別碼 給找出來呀!
    單純知道這些值並沒有什麼卵用,將其成員化爲我所用纔是硬道理,所以該版本主要做的就是對 vkCode獲取及其成員化

具體步驟

  • 呃,copy 代碼 (⊙﹏⊙) img1
    如果想要學習正規的偷懶方式,請見 Option1
    說白了,什麼粗活髒活累活全交給機器做,機器做得不合格的再做處理
    但其實直接 copy 源代更直接些,只不過這裏介紹個偷懶的 辦法而已(●ω●)

  • 之所以選了 vkCode 而不用 KeyEvent,原因可見 Option2 & Option3

  • vkCode 的詳細介紹請見文末的相關鏈接
    總的而言它可以識別鍵盤上絕大多數的按鍵,爲什麼說是絕大多數,因爲 Fn 就沒有 (  ̄﹏ ̄;)
    所以這裏 Fn 初始值爲 -1,表示啥也不是。。。
    這算是美中不足吧,不過這並不妨礙後續開發,所以無傷大雅

  • img1
    img1


Options

Option1

  • [vkCode 變量及其初始化(正解)] 注: 這裏用到下一個版本的內容 KeyboardHook
    1. KeyboardPiano 中弄個內部類,如 KeyAdapter implements KeyListener =>
      @Override keyPressed(KeyEvent e) =>
      String keyName = KeyEvent.getKeyText(e.getKeyCode()) 獲取按鍵名稱,作爲變量名
    2. KeyboardHook => WinUser.LowLevelKeyboardProc => callback() 在該回調函數C++ 的稱呼,後續版本有詳細介紹)中獲取按鍵的 vkCode,並初始化 KeyAdapter 中輸出的變量
    3. 詳細過程及其輸出示例見此鏈接:keyPressed & callback 前方又一次英語預警(@_@)

Option2

  • [爲何要用 vkCode]
    1. 之所以費這麼大勁,放着 java 自帶的鍵盤監聽類不用(詳見 Option1),非得透過外包接口訪問系統獲取信息(Windows DDL),其主要原因還不是爲了好用,不僅功能強大而且對後續開發有積極的影響(比如說,監聽按鍵,關聯按鈕,屏蔽系統按鍵,etc)
    2. 更何況導入幾個外包也不是什麼難事,最重要還是能簡單有效地把功能實現,其他的都好談嘛(∩ω∩)

Option3

  • [KeyEvent 的不足之處]
    1. 起初博主使用 KeyListener 對鍵盤進行監聽,原理就是系統把鍵盤的信息扔給 KeyEvent,從而通過 KeyEvent 進行相應的處理
    2. 但是 java 自帶的鍵盤監聽接口功能有限,鍵盤中重複的鍵不能區分,比如說,L & R Ctrl, Alt, Shift
      可能也是博主沒有對該接口(以及其實現類?)進行深入學習,所以用起來感覺一般(有待商榷)
    3. 不過該接口也不是說沒有用,後面測試的時候還有用處,比如說 Option1

相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章