如何在 JavaFX Spinner 组件中启用 up/down 键

How to enabled up/down keys in a JavaFX Spinner component

我在我的 JavaFX 应用程序中使用 Spinner 组件。它是通过 FXML 创建的:

<Spinner fx:id="spinner" editable="true" min="0" max="100"
         initialValue="3" />

根据 Spinner 的文档:

The keyboard up/down arrow keys also cycle through the elements.

但是,当我单击微调器组件并按向上或向下键时,只有文本字段中的光标位置发生变化,微调器值没有变化。

是否可以让微调器组件像 JavaDoc 中描述的那样对 UP 和 DOWN 做出反应?

我已经尝试添加一个关键侦听器来完成这项工作:

spinner.setOnKeyPressed(event -> {
    switch (event.getCode()) {
        case UP:
            spinner.increment(1);
            break;
        case DOWN:
            spinner.decrement(1);
            break;
    }
});

但是这个监听器只有在我按下UP或者DOWN结合控制键的时候才会被调用,不是很直观。有没有没有这种组合键的解决方案?

我相信这是因为您的 FXML 中有 editable="true"。微调器中的 TextField 将变得可编辑并拦截所有点击,因此您只需在 editorProperty() 上设置 Listener 而不是微调器本身。像这样:

spinner.getEditor().setOnKeyPressed(event -> {
            switch (event.getCode()) {
                case UP:
                    System.out.println("++1");
                    spinner.increment(1);
                    break;
                case DOWN:
                    System.out.println("--1");
                    spinner.decrement(1);
                    break;
            }
        });