如何将侦听器附加到 JavaFX 微调器?

How do you attach a listener to a JavaFX spinner?

我已经 运行 解决了 JavaFX 微调器似乎(无论如何对我而言)的一个奇怪问题,并且无法将任何类型的侦听器附加到它。

我习惯了 Swing 编程,我可以在其中将 ChangeListener 附加到 JSpinner 并以这种方式接收事件,但 JavaFX 似乎没有类似的功能。

有问题的代码...

    IntegerSpinnerValueFactory spinnerValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, Integer.MAX_VALUE); 

    hullPointsSpinner = new Spinner<Integer>(spinnerValueFactory); 
    hullPointsSpinner.setEditable(true);

    ((TextField)hullPointsSpinner.getEditor()).setOnAction(new EventHandler<ActionEvent>() {

        public void handle( ActionEvent event )
        {
        System.out.println("Howdy, folks!  Value is " + hullPointsSpinner.getValue() + "!!"); 
        }
    });

箭头按钮将增加和减少字段中的值,但对模型中的值没有影响。只有选择字段的内容并按下回车才会实际更新模型中的数据并打印出值。 (我知道,按回车键的东西在文档中。)

我还意识到我正在使用 getEditor 将 EventHandler 放到 Spinner 的 TextField 上,但我还没有看到另一种方法可以做到这一点。

有没有办法将侦听器挂接到微调器的按钮?
(哎呀,有没有办法让这些按钮附加一个监听器?)

我是否从 spinner/editor 收到了错误类型的事件? 我可以在 spinnerValueFactory 上放置某种侦听器吗?
我在这里忽略了某种明显的解决方案吗?

如有必要,我会用 JSpinner 替换它,但我觉得这个 API 会有一个微调器组件,而且使用起来很尴尬。

提前致谢。

以下似乎对我来说工作正常:

hullPointsSpinner.valueProperty().addListener((obs, oldValue, newValue) -> 
    System.out.println("New value: "+newValue));

或者你可以这样做

spinnerValueFactory.valueProperty().addListener(...);

使用与上述相同的侦听器。

您应该注意 this bug,它已在 1.8.0u60 中修复。