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

Boz*_*hil 10 java swing javafx

我遇到了(对我而言)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() + "!!"); 
        }
    });
Run Code Online (Sandbox Code Playgroud)

箭头按钮将增加和减少字段中的值,但不会影响模型中的值.仅选择字段的内容并按Enter将实际更新模型中的数据并打印出值.(我知道,紧迫的输入内容在文档中.)

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

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

我是否从微调器/编辑器接收到错误的类型事件?我可以在spinnerValueFactory上放一些监听器吗?
我在这里有一些明显的解决方案吗?

如果有必要的话,我会用JSpinner替换它,但是我觉得这个API会有一个微调器组件以及如此笨拙的使用方式.

提前致谢.

Jam*_*s_D 16

以下似乎对我很好:

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

或者你可以做

spinnerValueFactory.valueProperty().addListener(...);
Run Code Online (Sandbox Code Playgroud)

与上述听众一样.

你应该注意这个bug,它在1.8.0u60中修复.

  • 是的。仅供参考,这基本上是所有存储值的 JavaFX 控件(可能除了“Button”之外的所有控件)的工作方式。`checkBox.selectedProperty().addListener(...)`、`textField.textProperty().addListener(...)`、`comboBox.valueProperty().addListener(...)`等。 (2认同)