我遇到了(对我而言)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会有一个微调器组件以及使用它的这种笨拙的方式,这对我来说似乎很疯狂。
提前致谢。
答案 0 :(得分:13)
以下似乎对我有用:
hullPointsSpinner.valueProperty().addListener((obs, oldValue, newValue) ->
System.out.println("New value: "+newValue));
或者你可以做
spinnerValueFactory.valueProperty().addListener(...);
使用与上面相同的监听器。
你应该注意this bug,它是在1.8.0u60中修复的。