我试图跟踪全局关键事件,特别是按下箭头键。为此,我将处理程序附加到当前活动的场景:
scene.setOnKeyPressed(event ->
System.out.println("KEY PRESSED: " + event.getCode())
)
但是,虽然始终检测到大多数键,如字母,ctrl和tab,但空格和箭头键仅在没有元素具有焦点时起作用。也就是说,当我点击窗口中的任何位置时,某些元素会获得焦点并按下空格或箭头不会再触发该事件。通过CSS样式我发现,一旦点击场景,总会出现一个聚焦元素,在这种情况下上面的键停止工作。
我的猜测是,有针对性的节点会听取关键事件,如果有空格或箭头,则拒绝冒泡它们。我的问题是:
答案 0 :(得分:1)
事实证明,事件不是由单独聚焦的节点捕获的,而是ScrollPane
包装所有事件。如有必要,它会捕获这些键以滚动视口,如果不能滚动,它仍然不会冒泡它们。
如this answer中所述,可以使用ScrollPane#addEventFilter
来改变此行为,但应注意不要以负面方式影响可用性。
从这个意义上讲,将箭头和空格保留为默认行为(滚动)并切换到不同的键可能会更好。