JavaFX InputMap/ActionMap 等效?
JavaFX InputMap/ActionMap equivalent?
我终于完全切换到 JavaFX。
我非常喜欢按键功能。
是否有与您在 Swing 中找到的(非常好的)热键体系结构等效的热键体系结构?它在 JavaFX 文本控件对象的情况下如何工作?我想如果我看一下 javafx.scene.control.TextInputControl
,一切都会清楚的。当然也尝试了谷歌搜索。
但我 none 更聪明。大概必须有编辑文本时所需的最少击键绑定的来源?它是否具有类似的层次结构?
使用 Swing,每个 JComponent
可以使用 1 个 ActionMap
和 3 个 InputMaps
(所有这些都可以有 "ancestor" 映射)。 3 InputMap
"types" 由 JComponent
常量 WHEN_FOCUSED
、WHEN_IN_FOCUSED_WINDOW
和 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
决定,这些名称不言自明。我真的很想知道有多少 Swing 用户熟悉所有这些东西,但就个人而言,作为一个键盘狂热者,我广泛使用了这个功能。
能够使用 setOnKeyPressed
将键绑定附加到给定的 javafx.scene.Node
大概等同于使用 WHEN_FOCUSED
Swing 功能...但是其他两个类别呢,我想知道?它们是否在当前的 JavaFX 实现中根本不存在?
最终,对于 Swing,在幕后显然有一个非常复杂的机制,涉及击键是 "passed up" JComponent
对象的层次结构,直到它们被 [="caught" 15=] (or not)...大概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
编辑(1):事件传播的工作原理
来自http://docs.oracle.com/javafx/2/events/processing.htm
事件传递过程包含以下步骤:
- 目标选择
- 路线建设
- 事件捕获
- 事件冒泡
啊哈。
,从一年前开始,已经与 Java 9 相关,揭示了 JavaFX 中 com.sun.javafx.scene.control.inputmap.InputMap
的未来存在......显然在此时此刻
包 com.sun.javafx.scene.control.inputmap
不存在(在 Java 8 中)(除非我大错特错)。
提出这个问题的人 Kleopatra 是 Java Swing 方面的专家,现在大概是 JavaFX 方面的专家。我们看到 Java 9 的一些早期版本发生在 2017 年 3 月左右,准确地说......但是已经尝试使用谷歌搜索 API Javadoc for JavaFX 9,我目前还看不到 com.sun.javafx.scene.control.inputmap.InputMap
.
的任何迹象
我终于完全切换到 JavaFX。
我非常喜欢按键功能。
是否有与您在 Swing 中找到的(非常好的)热键体系结构等效的热键体系结构?它在 JavaFX 文本控件对象的情况下如何工作?我想如果我看一下 javafx.scene.control.TextInputControl
,一切都会清楚的。当然也尝试了谷歌搜索。
但我 none 更聪明。大概必须有编辑文本时所需的最少击键绑定的来源?它是否具有类似的层次结构?
使用 Swing,每个 JComponent
可以使用 1 个 ActionMap
和 3 个 InputMaps
(所有这些都可以有 "ancestor" 映射)。 3 InputMap
"types" 由 JComponent
常量 WHEN_FOCUSED
、WHEN_IN_FOCUSED_WINDOW
和 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
决定,这些名称不言自明。我真的很想知道有多少 Swing 用户熟悉所有这些东西,但就个人而言,作为一个键盘狂热者,我广泛使用了这个功能。
能够使用 setOnKeyPressed
将键绑定附加到给定的 javafx.scene.Node
大概等同于使用 WHEN_FOCUSED
Swing 功能...但是其他两个类别呢,我想知道?它们是否在当前的 JavaFX 实现中根本不存在?
最终,对于 Swing,在幕后显然有一个非常复杂的机制,涉及击键是 "passed up" JComponent
对象的层次结构,直到它们被 [="caught" 15=] (or not)...大概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
编辑(1):事件传播的工作原理
来自http://docs.oracle.com/javafx/2/events/processing.htm
事件传递过程包含以下步骤:
- 目标选择
- 路线建设
- 事件捕获
- 事件冒泡
啊哈。
com.sun.javafx.scene.control.inputmap.InputMap
的未来存在......显然在此时此刻
包 com.sun.javafx.scene.control.inputmap
不存在(在 Java 8 中)(除非我大错特错)。
提出这个问题的人 Kleopatra 是 Java Swing 方面的专家,现在大概是 JavaFX 方面的专家。我们看到 Java 9 的一些早期版本发生在 2017 年 3 月左右,准确地说......但是已经尝试使用谷歌搜索 API Javadoc for JavaFX 9,我目前还看不到 com.sun.javafx.scene.control.inputmap.InputMap
.