javafx双向变更通知赢得';不行?

javafx双向变更通知赢得';不行?,java,javafx,bind,Java,Javafx,Bind,考虑以下情况: 我正在将TextField的字符串属性绑定到float属性: TextField txtField; SimpleFloatProperty floatprop; void bind(){ txtField.textProperty().bindBidiretional(floatprop, NumberFormat.getInstance); } 此外,我想检查该值是否为正值,如有必要,我想重置该值: floatprop.addListener(new ChangeLi

考虑以下情况:

我正在将
TextField
的字符串属性绑定到float属性:

TextField txtField;
SimpleFloatProperty floatprop;

void bind(){
  txtField.textProperty().bindBidiretional(floatprop, NumberFormat.getInstance);
}
此外,我想检查该值是否为正值,如有必要,我想重置该值:

floatprop.addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {                
    SimpleFloatProperty prop = (SimpleFloatProperty)ov;
    if(t.floatValue() <= 0)
        prop.set(t1.floatValue());
    else
        prop.set(t.floatValue());
    }
});
floatprop.addListener(新的ChangeListener(){
@凌驾

public void changed(observevalue对于我来说,在
changed
的开头进行此检查是有效的:

if (t != null && t.equals(t1))
    return;
奇怪的是,这种方法有时也会失败。然后,除了使用一个标志外,没有其他方法,如下所示:

MyListener implements ChangeListener<...>{
   boolean fired;
   public void changed(...){
      if(fired)
          return;
      fired = true;
      // Change the variable...
      fired = false; 
   }
}
MyListener实现ChangeListener{
布尔激发;
公共无效已更改(…){
如果(被解雇)
回来
激发=真;
//更改变量。。。
解雇=假;
}
}

我不喜欢后一种方式,但似乎别无选择。

你能提供一个SSCCE吗?我发现了,为什么它不起作用。我现在想知道如何使它起作用:D。有关详细信息,请参阅我的编辑。