如何在JavaFX中区分左/右shift、ctrl、alt和enter键?

如何在JavaFX中区分左/右shift、ctrl、alt和enter键?,java,keyboard,javafx,javafx-8,keyboard-events,Java,Keyboard,Javafx,Javafx 8,Keyboard Events,JavaFX8控制器如何判断Shift、Ctrl、Alt或Enter键位于键盘的左侧还是右侧 对于javafx.scene.input.KeyEvent类,java.awt.event.KeyEvent中的getKeyLocation()方法不存在 我还试图通过截取window.onkeydown来检查Javascript中的event.location,但与V8或其他JS引擎不同的是,Nashorn库似乎没有区分它们,并返回DOM\u KEY\u location\u标准 由于整个密钥捕获看起

JavaFX8控制器如何判断Shift、Ctrl、Alt或Enter键位于键盘的左侧还是右侧

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

我还试图通过截取
window.onkeydown
来检查Javascript中的
event.location
,但与V8或其他JS引擎不同的是,Nashorn库似乎没有区分它们,并返回
DOM\u KEY\u location\u标准

由于整个密钥捕获看起来非常不一致(在
KeyEvent::getCode
/
keyText
方法中存在不一致),我开始认为需要一个外部库。JavaFX(或Java)库中是否有解决方案,如果没有,是否有一个轻量级库可以在不同平台(Windows、Linux和Mac OS)上提供相同的功能

提前谢谢

更新

尝试使用JavaFX+awt组件(请参阅),但无法正常工作,因为JavaFX似乎提供并翻译了错误的事件


通过(他们)尝试,它几乎可以作为一种变通方法,但无法识别一些键,时间不精确,实现起来有点笨拙,特别是因为我无法为所有平台编译本机代码。许可条款也有点混乱(稳定版本的GPL,在我的情况下,这不是一个选项,可能会转移到LGPL…。

我建议只使用它,因为它可以完美地满足您的需要。它非常轻,而且更重要的是,它提供了对Windows、Linux和Mac OS的支持。你可以找到一个简单的例子

我认为最有帮助的是,它确实提供了右与左之间的区别,如找到的文档中提到的
KEY\u LOCATION\u right
KEY\u LOCATION\u left

例如:
getKeyCode
可能会返回
VK\u SHIFT
,然后
getKeyLocation
可能会返回
KEY\u LOCATION\u RIGHT
,这显然表明按下了右SHIFT键,此时您可以执行任何需要的操作


祝你好运

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


如果这对您很重要,我建议您在

提交一个功能请求,这是一个想法,尽管JavaFX中的行为不支持getKeyLocation,但返回值总是
KEY\u LOCATION\u UNKNOWN
。他们在Java 8方面做得很好;)除此之外,我并不是真的热衷于将JavaFX与Awt相结合——如果它能起作用的话,这将是一个可行的办法,但事实显然不是这样。与此同时,我找到了JNativeHook,我迫不及待地想尝试一下。感谢链接,我可能应该报告关键事件系统的不稳定和不完整行为。请提交错误报告。我收到了JavaFX团队关于bug报告和功能请求的良好回复,我收到了。还注意到他们没有在事件上实现任何时间戳(getWhen),这对于该框架来说几乎是不可能的。我担心我将不得不切换到.NET并等待JavaFX成熟(希望Java 8也成熟),直到考虑多平台支持:(你能发布到jira请求的链接吗?