gpt4 book ai didi

JavaFX InputMap/ActionMap 等效吗?

转载 作者:行者123 更新时间:2023-11-30 06:51:19 24 4
gpt4 key购买 nike

我终于完全切换到 JavaFX。

我非常热衷于按键功能。

是否有与您在 Swing 中找到的(非常好的)热键架构等效的热键架构?对于 JavaFX 文本控制对象,它是如何工作的?我想如果我看一下javafx.scene.control.TextInputControl,一切都会变得清楚。当然也尝试过谷歌搜索。

但我还是一无所知。想必一定有编辑文本时所需的最小击键绑定(bind)的来源?是不是也有类似的层次结构?

对于 Swing,每个 JComponent 都可以使用 1 个 ActionMap 和 3 个 InputMaps(所有这些都可以有“祖先”映射)。 3 个 InputMap“类型”由 JComponent 常量 WHEN_FOCUSEDWHEN_IN_FOCUSED_WINDOWWHEN_ANCESTOR_OF_FOCUSED_COMPONENT 确定code> 这是非常不言自明的名称。我认真地想知道有多少 Swing 用户熟悉所有这些东西,但就我个人而言,作为键盘狂热分子,我广泛使用此功能。

能够使用 setOnKeyPressed 将按键绑定(bind)附加到给定的 javafx.scene.Node 大概相当于使用 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 **/ }
)

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

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

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com