在不同的微调器上按下回车键后如何请求关注微调器

How to request focus on spinner after pressing the enter key on a different spinner

所以我有 2 个 SpinnerwindVelSpinnerlaunchTubeSpinner。他们在按键操作上有以下内容(我正在使用场景生成器):windSpinActionlaunchSpinAction 是我对它们的称呼。这是 windSpinAction 方法:

@FXML
void windSpinAction(KeyEvent ke) {
    if (ke.getCode().equals(KeyCode.ENTER)) {
        launchTubeSpinner.requestFocus();
    } // end if statement

当我 运行 程序并点击 enter 而焦点在 windVelSpinner 上时没有任何反应。但是如果我点击 shift+enter 它会将焦点移动到 launchSpinAction。为什么会这样,我该如何解决?提前致谢!

这与是否按shift无关。由于您使用 onKeyPressed 事件,因此事件会在第一个 Spinner 上触发,这使得第二个 Spinner 在仍按下键时接收焦点,因此第二个 Spinner 接收事件也是如此,第一个 Spinner 再次获得焦点,它再次接收事件,再次将焦点更改为第二个 Spinner,依此类推...

结果是焦点在 Spinner 之一处或多或少随机结束。

改为使用每次按键仅触发一次的 onKeyReleased 事件。


如果您有可编辑的 Spinner 并希望在用户输入后更改焦点,请使用 onAction event of the editor 而不是 Spinner 上的按键事件。

windVelSpinner.getEditor().setOnAction(e -> {
    launchTubeSpinner.requestFocus();
});

(在initialize方法中)