如何在JavaFX Spinner组件中启用向上/向下键

时间:2015-06-02 13:20:12

标签: java spinner javafx-8

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

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

根据Spinner的文件:

  

键盘上/下箭头键也循环显示元素。

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

是否可以让spinner组件按照JavaDoc中的描述在UP和DOWN上做出反应?

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

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

然而,只有当我按下UP或DOWN并结合控制键时才会调用此监听器,这不是很直观。有没有这种组合键的解决方案吗?

1 个答案:

答案 0 :(得分:3)

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

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;
            }
        });