JavaFX:如何在屏幕上的任何位置检测鼠标/键事件?
发布时间:2020-12-15 04:40:24 所属栏目:Java 来源:网络整理
导读:我试图用 Java(fx)捕获鼠标/键事件,即使应用程序窗口没有集中…… 我正在创建类似于screenrecorder的东西,我想通过按“F9”之类的键来停止录制,所以我需要检测事件.这可能吗? 有没有像我可以使用的系统监听器? ?亨利 解决方法 这是可能的,但如果注册的组件
我试图用
Java(fx)捕获鼠标/键事件,即使应用程序窗口没有集中……
我正在创建类似于screenrecorder的东西,我想通过按“F9”之类的键来停止录制,所以我需要检测事件.这可能吗? 有没有像我可以使用的系统监听器? ?亨利 解决方法
这是可能的,但如果注册的组件不在焦点,则标准Java无法访问键击或鼠标事件.
为了实现这一点,您需要通过Java Native Interface(JNI)使用本机代码.这使Java代码能够调用本机应用程序(特定于硬件和操作系统平台的程序)和用其他语言(如C和C)编写的库. 幸运的是,有一个第三方库JNativeHook专为您的需求而设计.你可以在这里找到它:https://github.com/kwhat/jnativehook 如果您使用Maven进行依赖关系管理,则可以轻松安装.这是一个工作示例: App.java package com.sotest.globalkeylistener; import org.jnativehook.GlobalScreen; import org.jnativehook.NativeHookException; public class App { public static void main(String[] args) { try { GlobalScreen.registerNativeHook(); } catch (NativeHookException ex) { System.exit(1); } GlobalScreen.addNativeKeyListener(new GlobalKeyListener()); } } GlobalKeyListener.java package com.sotest.globalkeylistener; import org.jnativehook.GlobalScreen; import org.jnativehook.NativeHookException; import org.jnativehook.keyboard.NativeKeyEvent; import org.jnativehook.keyboard.NativeKeyListener; public class GlobalKeyListener implements NativeKeyListener { public void nativeKeyPressed(NativeKeyEvent e) { System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) { try { GlobalScreen.unregisterNativeHook(); } catch (NativeHookException e1) { e1.printStackTrace(); } } } public void nativeKeyReleased(NativeKeyEvent e) { System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode())); } public void nativeKeyTyped(NativeKeyEvent e) { System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode())); } } 关键输出: 鼠标输出 这样,即使Java应用程序已最小化,您也可以检测到该事件. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |