我终于完全切换到JavaFX。

我非常喜欢按键功能。

是否有与您在Swing中发现的(非常好)等效的热键体系结构?对于JavaFX文本控件对象,它如何工作?我认为,如果我看一下javafx.scene.control.TextInputControl,一切都会变得清晰起来。当然也尝试了谷歌搜索。

但是我都不是明智的。大概在编辑文本时必须有您所需的最小按键绑定的来源?是否类似地分层?

使用Swing,每个JComponent可以使用1个ActionMap和3个InputMaps(并且所有这些都可以具有“祖先”映射)。 3个InputMap“类型”由JComponent常量WHEN_FOCUSEDWHEN_IN_FOCUSED_WINDOWWHEN_ANCESTOR_OF_FOCUSED_COMPONENT确定,它们是不言自明的名称。我真的很想知道有多少Swing用户熟悉所有这些功能,但是作为键盘狂热者,我个人广泛使用此功能。

可以使用javafx.scene.Node将键绑定绑定到给定的setOnKeyPressed大概等同于使用WHEN_FOCUSED Swing功能...但是我想知道其他两个类别又如何呢?在当前的JavaFX实现中是否只是缺少它们?

最终,借助Swing,幕后显然存在一种非常复杂的机制,其中涉及将击键“传递”到JComponent对象的层次结构中,直到它们被“ InputMap”(或没有)“抓住” ...大概在那儿。在JavaFX中一定是类似这样的东西。最好有章节和经文...

最佳答案

在JavaFX中,您可以注册KeyPressed事件的回调。

例如:

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 **/ }
    )


可用的KeyCodeCombinations列表:https://docs.oracle.com/javafx/2/api/javafx/scene/input/KeyCodeCombination.html

EDIT(1):事件传播的工作方式

来自http://docs.oracle.com/javafx/2/events/processing.htm

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


目标选择
路线建设
事件捕捉
事件冒泡

关于java - JavaFX InputMap/ActionMap是否等效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42713630/

10-15 13:24