我终于完全切换到JavaFX。
我非常喜欢按键功能。
是否有与您在Swing中发现的(非常好)等效的热键体系结构?对于JavaFX文本控件对象,它如何工作?我认为,如果我看一下javafx.scene.control.TextInputControl
,一切都会变得清晰起来。当然也尝试了谷歌搜索。
但是我都不是明智的。大概在编辑文本时必须有您所需的最小按键绑定的来源?是否类似地分层?
使用Swing,每个JComponent
可以使用1个ActionMap
和3个InputMaps
(并且所有这些都可以具有“祖先”映射)。 3个InputMap
“类型”由JComponent
常量WHEN_FOCUSED
,WHEN_IN_FOCUSED_WINDOW
和WHEN_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/