JavaFx全局快捷键实现(Kotlin)
原文地址: 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文件都打包上传到蓝奏云了,各位需要自取
下载下来后需要把文件放在指定路径中,如下图所示
测试
随便在一个地方,按下设置好的快捷键就会成功触发
PS:如果一个软件中已经有对应的快捷键,那么你设置的全局快捷键会直接被该软件给消费,没法触发我们java程序里的快捷键了...