如何在JavaFX中区分左/右移位,ctrl,alt和输入键?

时间:2014-08-31 19:49:02

标签: java keyboard javafx javafx-8 keyboard-events

JavaFX 8控制器如何判断是否找到 Shift Ctrl Alt Enter 键在键盘的左侧或右侧?

getKeyLocation()java.awt.event.KeyEvent中的javafx.scene.input.KeyEvent方法不幸存在于event.location类。

我还尝试通过截取window.onkeydown来检查Javascript中的DOM_KEY_LOCATION_STANDARD,但与V8或其他JS引擎不同,看起来Nashorn库并没有区别它们并返回{{1无论密钥位于何处。

由于整体密钥捕获似乎已经完全破坏(KeyEvent::getCode / keyText方法中的不一致),我开始认为外部库是必要的。 JavaFX(或Java)库中是否有解决方案,如果没有,可以在不同平台(Windows,Linux和Mac OS)上提供相同功能的轻量级库?

提前致谢!

更新

尝试使用JavaFX + awt组件(请参阅suggestion below),但不会像JavaFX提供的那样工作并且不正确地翻译事件。

尝试使用JNativeHook(他们recently moved),几乎符合解决方案但无法识别某些密钥,时间不准确且有点尴尬实现,特别是因为我无法为所有平台编译本机代码。许可条款也有点混乱(稳定版的GPL,在我的情况下不是一个选项,可能转向LGPL ......)。

2 个答案:

答案 0 :(得分:2)

据我所知,目前还没有用于确定在JavaFX中按下哪个物理键的API。很难看出第三方库如何实现这一点,因为它必须以这种代码无法真正访问的方式拦截JavaFX的低级实现。

如果这对您很重要,我建议您在https://javafx-jira.kenai.com/

提交功能请求

答案 1 :(得分:1)

我建议只使用java.awt,因为它可以完美地满足您的需求。它非常轻巧,更重要的是,它提供对Windows,Linux和Mac OS的支持。您可以找到一个简单的示例here

我认为最有帮助的事实是,它确实提供了KEY_LOCATION_RIGHTKEY_LOCATION_LEFTgetKeyCodeVK_SHIFT之间的差异,正如here所提到的文档中提到的那样p>

例如:getKeyLocation可能会返回KEY_LOCATION_RIGHT,然后{{1}}可能会返回{{1}},这显然会指示右移键被按下,此时您可以执行任何操作你需要。

祝你好运!