我正在尝试直接向操作系统注册程序的全局热键。我让它对所有列为JavaFX键码的键起作用,但是如果键码对于某个键是“未定义的”,我就无法将它与其他未定义的键区分开来,所以我不能使用它。
:许本图18.04。
爪哇
:版本11.0.1 2018-10-16 LTS,Oracle
JavaFX
:SDK 11.0.1版
当我按键盘上的媒体键时,会出现未定义的KeyEvent:
System.out.println(键事件)
:Key Event:KeyEvent[source=text field@25181b05[styleClass=text input text field],target=TextField@25181b05[styleClass=text input text field],eventType=Key_PRESSED,consusted=true,character=
keyEvent.getCode()
:未定义
我想再按一下那个键就能认出
问题是,我看不到任何方法来区分JavaFX中KeyEvent中未定义的键。基于KeyEvent的公共API,通过查看JavaFX中KeyEvent的源代码,KeyEvent似乎没有保留任何可以唯一标识key code中未定义的按键的附加信息。
深入研究JavaFX代码,它似乎是我需要的唯一标识符
可以
EmbeddedScene.keyEvent
:
@Override
public void keyEvent(final int type, final int key, final char[] ch, final int modifiers);
那个论点
final int key
KeyCodeMap.valueOf (key)
函数,在本例中返回KeyCode.UNDEFINED。我不容易测试,但我敢打赌
int
对于每个不同的媒体密钥都有不同的值。
有没有办法在JavaFX阶段的较低级别监听KeyEvents——在它们被转换成KeyCode并且我需要的信息丢失之前——这样我就可以捕获热键并在操作系统中注册它?
我相信,如果我能让代码库中的一个方法在按下某个键时触发,并让该键显示一个唯一的标识符,我就能将其余部分连接在一起。它不一定需要在JavaFX堆栈中。