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

时间:2015-04-28 17:46:23

标签: 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() + "!!"); 
        }
    });

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

我也意识到我将这个EventHandler放到Spinner的带有getEditor的TextField上,但我还没有看到另一种方法。

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

我是否从微调器/编辑器接收到错误的类型事件? 我可以在spinnerValueFactory上添加某种监听器吗? 我有什么明显的解决方案可以忽略这里吗?

如果有必要的话,我会用JSpinner替换它,但我觉得这个API会有一个微调器组件以及使用它的这种笨拙的方式,这对我来说似乎很疯狂。

提前致谢。

1 个答案:

答案 0 :(得分:13)

以下似乎对我有用:

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

或者你可以做

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

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

你应该注意this bug,它是在1.8.0u60中修复的。