原文地址: JavaFx全局快捷鍵實現(Kotlin) | Stars-One的雜貨小窩
最近整款工具需要用到全局快捷鍵,搜集了下網上的資料,發現有個JIntellitype庫可以用來實現全局快捷鍵,下面記錄下個人的使用
JIntellitype
只適用windows的全局快捷鍵綁定,並不能全平台支持!!
注:本文使用的Kotlin,Java版的可以參考下JIntellitype的文檔,
PS:后面我還發現有個jnativehook的庫,在github上的⭐還挺多的,文檔介紹其支持全平台的
然后使用文檔啥也沒有,參考的示例整了些沒能成功就放棄了,其例子也是給的swing,而不是javafx,我自己摸索了半天還報錯,就放棄了
使用
吐槽下,這個作者寫的文檔使用說明其實有點不是太明確,第一遍看過去人都懵的...
而且看網上的資料,都是自己去拷貝jar包,實際上作者已經把jar包發布在maven中央倉庫了,根本沒有必要手動去下載
JIntellitype此庫好像支持JDK8和JDK9
1.導入依賴
<dependency>
<groupId>com.melloware</groupId>
<artifactId>jintellitype</artifactId>
<version>1.4.0</version>
</dependency>
2.注冊按鍵
我們以全局注冊個Ctrl
+Shift
+G
的快捷鍵為例
//這里必須是大寫字母
val keyCode = 'G'.toInt() //這個其實是ASCII碼(G的ASCII碼數值為71)
//注意這個1,下面第三步的回調函數會根據這個來進行判斷
JIntellitype.getInstance().registerHotKey(1, JIntellitype.MOD_CONTROL + JIntellitype.MOD_SHIFT, keyCode)
JIntellitype.MOD_CONTROL
Ctrl鍵JIntellitype.JIntellitype.MOD_SHIFT
Shift鍵JIntellitype.MOD_ALT
Alt鍵JIntellitype.MOD_WIN
Windows鍵
3.注冊按鍵監聽器
JIntellitype.getInstance().addHotKeyListener {
if (it == 1) {
//寫上觸發快捷鍵后的處理邏輯
println("已按下快捷鍵")
}
}
注意,addHotKeyListener
中回調函數會返回一個數字,這個數字是用來區分不同的快捷鍵的,是在上面注冊按鍵的步驟中定義的
PS:如果想取消注冊,使用unregisterHotKey()
方法即可,如下面所示
//1就是上面注冊用的
JIntellitype.getInstance().unregisterHotKey(1)
4.下載dll文件
上面我把32位和64位的dll文件都打包上傳到藍奏雲了,各位需要自取
下載下來后需要把文件放在指定路徑中,如下圖所示
測試
隨便在一個地方,按下設置好的快捷鍵就會成功觸發