当前位置: 首页 > 知识库问答 >
问题:

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

郭云
2023-03-14

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

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

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

我的猜测是,聚焦节点会监听关键事件,如果是空格或箭头,则拒绝将其弹出。我的问题是:

  1. 为什么那些钥匙会被捕获?我认为任意UI组件没有必要总是处理箭头键和空格键事件。
  2. 我可以防止节点窃取关键事件,即使它们总是冒泡那些事件吗?如果没有,是否有其他方法来检测按键?

共有1个答案

东郭瀚玥
2023-03-14

事实证明,事件不是由单独聚焦的节点捕获的,而是由包装所有这些节点的ScrollPane捕获的。如果需要,它会捕获这些键来滚动视区,如果不可能滚动,它仍然不会冒泡这些键。

正如本答案中所解释的,可以通过使用ScrollPane#AddEventFilter来改变这种行为,但应该注意不要以负面的方式影响可用性。

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

 类似资料:
  • 我定义了一个表单字段的焦点事件,以打开一个Jquery UI对话框,其中包含可选择的选项。我希望焦点应该停留在相同的字段,以便不间断地输入数据。我的需求就像datepicker显示的那样,用户看到datepicker覆盖,但焦点停留在日期字段上,这样用户就可以继续输入日期。 下面是相关字段和对话框的代码。 下面是对话框Div with table。我正在使用jquery datatable插件填充

  • 焦点事件会在页面元素获得或失去焦点时触发。利用这些事件并与document.hasFocus()方法及 document.activeElement 属性配合,可以知晓用户在页面上的行踪。有以下6 个焦点事件。 blur:在元素失去焦点时触发。这个事件不会冒泡;所有浏览器都支持它。 DOMFocusIn:在元素获得焦点时触发。这个事件与HTML 事件focus 等价,但它冒泡。只有Opera 支持

  • 我有一个子组件,它有几个带有以下CSS属性的选项卡: 当我点击后退按钮时,它会返回到上一个选择的选项卡,这很好,但是焦点不会从当前的选项卡中移除,除非我点击屏幕的任何其他部分。 如何去除焦点?

  • 当页面加载Javascript事件时,我试图聚焦一个简单的输入文本,我的目标是聚焦并打开移动浏览器上的虚拟键盘,但我没有成功。 我的代码看起来很简单,比如: 我也试过jQuery... 在android上,输入得到了关注,但在iPhone上却没有。在这两种情况下,我都不会在页面加载时使用键盘。我不知道我还得做什么。

  • 我有一个场景 我想从一个特定的节点(比如ID:7)开始运行BFS 如果有无法从该节点访问的节点,我想重新启动BFS(使用任何剩余节点),直到访问图的所有顶点 到目前为止,我得到的是从节点0开始并用另一个未访问的顶点重新启动的代码(部分): 如何有效地更改此代码以满足我的要求?

  • 我试图使用cypher创建一个查询,该查询将“查找”厨师可能有的缺失食材,我的图是这样设置的: