希望实现一个功能,当检测到用户按下某个快捷键的时候响应做一些操作,希望能绑定系统全局快捷键,随时随地响应快捷键;
找到了2个实现方案:
- 通过
jkeymaster
:
先maven导入:
<!-- https://mvnrepository.com/artifact/com.github.tulskiy/jkeymaster -->
<dependency>
<groupId>com.github.tulskiy</groupId>
<artifactId>jkeymaster</artifactId>
<version>1.3</version>
</dependency>
demo如下:
// 用swing的queue
Provider provider = Provider.getCurrentProvider(true);
// 绑定快捷键
provider.register(KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
x-> System.out.println(x));
这里就是绑定了快捷键cmd+D,每次按下快捷键都会打印出来按键信息;
这里有个坑,在mac下如果要绑定command相关的快捷键,要用Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
方法,KeyEvent里没有直接能用的command,如果是windows可以直接在KeyEvent里面找要绑定的按键,比如ctrl,alt这些都有;
- 通过
jnativehook
:
先maven导入:
<!-- https://mvnrepository.com/artifact/com.1stleg/jnativehook -->
<dependency>
<groupId>com.1stleg</groupId>
<artifactId>jnativehook</artifactId>
<version>2.1.0</version>
</dependency>
这个jnativehook
的原理不是去系统全局注册快捷键,而是监听系统的所有鼠标,键盘,滚轮行为,当你监听到有自己希望触发的场景时,可以再做对应的操作;