gpt4 book ai didi

java - 如果节点具有焦点,某些关键事件不会到达场景

转载 作者:行者123 更新时间:2023-12-01 08:54:16 24 4
gpt4 key购买 nike

我正在尝试跟踪全局按键事件,特别是按下的箭头键。为此,我将一个处理程序附加到当前 Activity 的场景:

scene.setOnKeyPressed(event ->
System.out.println("KEY PRESSED: " + event.getCode())
)

但是,虽然字母、ctrl 和 tab 等大多数键始终会被检测到,但空格键和箭头键仅在没有元素获得焦点时才起作用。也就是说,只要我单击窗口中的任意位置,某些元素就会获得焦点,并且按空格或箭头不会再触发事件。通过 CSS 样式,我发现一旦单击场景,总会有一个焦点元素出现,并且上面的键在这种情况下停止工作。

我的猜测是,焦点节点会监听关键事件,如果是空格或箭头,则拒绝将它们冒泡。我的问题是:

  1. 为什么这些 key 会被捕获?我认为任意 UI 组件没有必要始终处理箭头和空格键事件。
  2. 我可以防止节点窃取关键事件,即让它们始终冒泡这些事件吗?如果没有,是否有另一种方法来检测按键?

最佳答案

事实证明,事件不是由单独聚焦的节点捕获的,而是由包裹所有事件的 ScrollPane 捕获的。它会捕获这些键以在必要时滚动视口(viewport),并且如果无法滚动,仍然不会使它们冒泡。

this answer 中所述,可以通过使用 ScrollPane#addEventFilter 来改变此行为,但应小心不要以负面方式影响可用性。

从这个意义上说,最好将箭头和空格保留为默认行为(滚动)并切换到不同的键。

关于java - 如果节点具有焦点,某些关键事件不会到达场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167830/

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