JavaFX InputMap/ActionMap等价物?

JavaFX InputMap/ActionMap等价物?,java,swing,user-interface,javafx,hotkeys,Java,Swing,User Interface,Javafx,Hotkeys,我终于完全切换到JavaFX了 我非常喜欢按键功能 是否有与Swing中的(非常好的)热键架构相同的热键架构?对于JavaFX文本控件对象,它是如何工作的?我想如果我看看javafx.scene.control.TextInputControl,一切都会变得清晰起来。当然,我也尝试过谷歌搜索 但我一点也不明白。大概在编辑文本时,必须有一个最小击键绑定的源?它是否具有类似的等级制度 使用Swing,每个JComponent都可以使用1ActionMap和3inputmap(所有这些都可以使用“祖先

我终于完全切换到JavaFX了

我非常喜欢按键功能

是否有与Swing中的(非常好的)热键架构相同的热键架构?对于JavaFX文本控件对象,它是如何工作的?我想如果我看看
javafx.scene.control.TextInputControl
,一切都会变得清晰起来。当然,我也尝试过谷歌搜索

但我一点也不明白。大概在编辑文本时,必须有一个最小击键绑定的源?它是否具有类似的等级制度

使用Swing,每个
JComponent
都可以使用1
ActionMap
和3
inputmap
(所有这些都可以使用“祖先”映射)。3个
InputMap
“类型”由
JComponent
常量
WHEN_FOCUSED
WHEN_IN_FOCUSED_窗口
WHEN_FOCUSED_组件
确定,这些都是非常简单的名称。我真的很想知道有多少Swing用户熟悉所有这些东西,但就我个人而言,作为一个键盘狂热者,我广泛使用这个功能

使用
setOnKeyPressed
将键绑定附加到给定的
javafx.scene.Node
大概相当于使用
聚焦时的
Swing功能。。。但我想知道,其他两类呢?在当前的JavaFX实现中,它们只是不存在吗


最终,对于Swing,在幕后显然有一种非常复杂的机制,包括击键“向上”传递
JComponent
对象的层次结构,直到它们被
InputMap
捕获(或不捕获)。。。大概JavaFX中一定有类似的东西。如果在JavaFX中有章和节…

,那就太好了。您可以注册一个
按键事件的回调

例如:

myTextField.setOnKeyPressed(event->{
    if (event.getCode() == KeyCode.ENTER){
        //do something here
    }
}
如果要注册全局键组合(例如,用于保存的典型Ctrl-S),可以使用:

myScene.getAccellerators().put(
    new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN),
            () -> { /** save my work **/ }
    )
可用KeyCodeCombination的列表:

编辑(1):事件传播的工作原理

事件传递过程包含以下步骤:

  • 目标选择
  • 线路建设
  • 事件捕获
  • 事件冒泡
    • 啊哈

      一年前的,已经与Java9相关的,揭示了未来在JavaFX中存在的
      com.sun.JavaFX.scene.control.inputmap.inputmap
      。。。显然现在 包
      com.sun.javafx.scene.control.inputmap
      不存在(在Java8中)(除非我大错特错)


      提出这个问题的人Kleopatra是JavaSwing方面的专家,大概现在是JavaFX方面的专家。我们看到一些Java 9的早期版本大约在2017年3月发布,确切地说。。。但是在谷歌搜索JavaFX9的API Javadoc之后,我还看不到
      com.sun.JavaFX.scene.control.inputmap.inputmap

      的任何迹象,你在找类似的东西吗?@Toddswell谢谢。。。开始回答,是的…谢谢。。。请看我的更新。实际上,我没有发现这个方法,因为我像个傻瓜一样(在Javadoc中)把TextField的大量继承属性列表错当成了方法!别担心。我已经更新了我的答案,以提供有关事件传播的信息。如果总体上你认为这个答案对你有帮助,或者更重要的是,可以帮助其他人在未来访问这个帖子,考虑把它标记为接受。干杯。有用的链接,看看它能发出什么光。我当然会在适当的时候接受答复。。。但太早做并不太好,因为一个“已回答”的问题会阻碍未来可能的答案。当我回答一个问题的时候,所以我对上票、下票或真的接受没有任何期望。对不起,迈克,我不是想催你,也不是暗示你必须接受我的回答,如果你不想的话。我想结果是错的。干杯