目前,在JavaFX中,按Enter键会触发UI中的默认按钮,按空格键会触发当前焦点控件上的onAction
。因为我正在使用视频处理工具,所以使用空格键来播放/暂停视频更自然。目前,我可以将Ctrl+空格键分配给Play/Pause如下:
scene.accelerators[KeyCodeCombination(SPACE, CONTROL_DOWN)] = Runnable {
autoPlayState.value = if (autoPlayState.value != null) null // Pauses playback
else Forward // Plays the video forward
}
我试着做同样的事情,同时从组合中删除Ctrl-Key,就像这样:
scene.accelerators[KeyCodeCombination(SPACE)] = Runnable {
autoPlayState.value = if (autoPlayState.value != null) null
else Forward
}
但它不起作用,因为JavaFX更喜欢为焦点控件触发onAction
,而不是调用加速器。
因此,我想改变这种行为,让回车键触发当前焦点控件,空格键触发加速键。这可能吗?
1条答案
按热度按时间bjp0bcyl1#
JavaFX控件的行为并不是真正的公共API(目前),因此更改控件的行为通常只是一项受支持程度较低的任务。(以及可能的其他控件)从头开始,最好的方法可能是使用事件过滤器拦截击键,如果您不希望它们以默认方式传播到控件,则使用它们。
这并不完全可靠,并且不清楚您需要过滤哪种类型的按键事件(按下、释放或键入),因此可能需要进行一些试错。