JavaFX InputMap / ActionMap等价?

时间:2017-03-10 08:27:40

标签: java swing user-interface javafx hotkeys

我终于完全切换到了JavaFX。

我非常热衷于按键功能。

在Swing中找到的(非常好的)架构是否有相同的热键架构?它在JavaFX文本控件对象的情况下如何工作?如果我看一下javafx.scene.control.TextInputControl,我认为一切都会变得清晰。当然也尝试用谷歌搜索。

但我没有更聪明的人。据推测,在编辑文本时,必须有一个最小击键绑定源?它是否同样分层?

使用Swing,JComponent每个ActionMap可以使用1 InputMaps和3 InputMap(并且所有这些都可以拥有"祖先"地图)。 3 JComponent"类型"由WHEN_FOCUSED常量WHEN_IN_FOCUSED_WINDOWWHEN_ANCESTOR_OF_FOCUSED_COMPONENTjavafx.scene.Node决定,它们是非常不言自明的名称。我真的很想知道有多少Swing用户熟悉所有这些东西,但就个人而言,作为键盘狂热者,我广泛使用这个功能。

能够使用setOnKeyPressed将键绑定附加到给定的WHEN_FOCUSED大概相当于使用JComponent Swing功能......但是其他两个类别呢,我想知道?它们是否在当前的JavaFX实现中缺席?

归根结底,在Swing的幕后,显然有一种非常复杂的机制,包括按键被传递出来。 InputMap个对象的层次结构,直到它们被捕获为#34;通过Oracle Storage Cloud Service container name must be in the format https|http://<storagedomain>/{version}/<schema name>/<container name> or <storage service name>-<identity domain name>/<container name>. For example, storagesvc999-usoracleaccoutrial00999/backupContainer Name of an existing Oracle Storage Cloud Service container in the form https|http://<storagedomain>/{version}/<schema name>/<container name> or <storage service name>-<identity domain name>/<container name>. e.g:storagesvc999-usoracleaccoutrial00999/backupContainer; If not already created, you can create the container by selecting the checkbox provided below. (或不是)...可能在JavaFX中必定有类似的东西。有章节和诗歌会很高兴......

2 个答案:

答案 0 :(得分:1)

在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

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

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

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

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

答案 1 :(得分:0)

阿哈。

This question,从一年前开始,已经与Java 9有关,揭示了com.sun.javafx.scene.control.inputmap.InputMap的JavaFX中未来的存在......显然此刻 包com.sun.javafx.scene.control.inputmap不存在(在Java 8中)(除非我非常错误)。

提出这个问题的人,Kleopatra,是Java Swing的专家,现在可能是JavaFX。我们看到Java 9的一些早期版本现在正在发生,即2017年3月,正是......但是我已经尝试使用Google Javadoc for JavaFX 9进行Google搜索,我还没有看到com.sun.javafx.scene.control.inputmap.InputMap的任何迹象。