我终于完全切换到 JavaFX。
我非常热衷于按键功能。
是否有与您在 Swing 中找到的(非常好的)等效的热键架构?对于JavaFX文本控件对象,它如何工作?我想如果我看一看,一切都会变得清楚javafx.scene.control.TextInputControl
。当然也试过谷歌搜索。
但我不是更聪明。据推测,编辑文本时必须有您需要的最小按键绑定的来源?是否类似地分层?
对于 Swing,每个人都JComponent
可以使用 1ActionMap
和 3 InputMaps
(并且所有这些都可以有“祖先”映射)。3 InputMap
“类型”被确定JComponent
的常数WHEN_FOCUSED
,WHEN_IN_FOCUSED_WINDOW
并且WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
其是不言自明的名字。我很想知道有多少 Swing 用户熟悉所有这些东西,但就我个人而言,作为一个键盘狂热者,我广泛地使用了这个功能。
能够将键绑定附加到给定的javafx.scene.Node
usingsetOnKeyPressed
大概等同于使用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
编辑(1):事件传播的工作原理
来自http://docs.oracle.com/javafx/2/events/processing.htm
事件传递过程包含以下步骤:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句