kotlin 更改Enter和Space键的行为

wfveoks0  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(229)

目前,在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,而不是调用加速器。
因此,我想改变这种行为,让回车键触发当前焦点控件,空格键触发加速键。这可能吗?

bjp0bcyl

bjp0bcyl1#

JavaFX控件的行为并不是真正的公共API(目前),因此更改控件的行为通常只是一项受支持程度较低的任务。(以及可能的其他控件)从头开始,最好的方法可能是使用事件过滤器拦截击键,如果您不希望它们以默认方式传播到控件,则使用它们。
这并不完全可靠,并且不清楚您需要过滤哪种类型的按键事件(按下、释放或键入),因此可能需要进行一些试错。

scene.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
    if (e.getCode() == KeyCode.SPACE) {
        // maybe some logic here to see what has the focus, etc...
        playOrPauseVideo();
        e.consume();
    }
});

相关问题