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

2022-09-04 08:27:20

我遇到了一个似乎(无论如何,在我看来)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() + "!!"); 
        }
    });

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

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

有没有办法将侦听器挂钩到微调器的按钮?
(哎呀,有没有办法找到这些按钮来连接听众?

我是否从微调器/编辑器接收了错误的类型事件?我可以把某种听众放在微调器ValueFactory上吗?
有没有某种明显的解决方案,我在这里忽略了?

如有必要,我将用JSpinner替换它,但是这个API将具有微调器组件并且使用它的方式如此尴尬,这对我来说似乎很疯狂。

提前致谢。


答案 1

以下内容对我来说似乎很好:

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

或者你可以做

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

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

您应该注意此错误,该错误已在1.8.0u60中修复。


答案 2

推荐