代码之家  ›  专栏  ›  技术社区  ›  Grumblesaurus

JavaFX KeyEvent-是否可以获取未定义事件的更多信息?

  •  3
  • Grumblesaurus  · 技术社区  · 6 年前

    我正在尝试直接向操作系统注册程序的全局热键。我让它对所有列为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堆栈中。

    0 回复  |  直到 6 年前