考虑以下情况:
我将TextField
的string-property绑定到float-property:
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());
}
});
这不起作用。无论我在文本字段中键入什么内容,都不会检查该值,即不会重置负值。
编辑:有点距离,我也明白为什么。在设置prop
时,将触发已更改的事件以进行方便的无限递归。我该如何解决这个问题?
答案 0 :(得分:0)
对我来说,它是在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;
}
}
我不喜欢后一种方式,但看起来没有其他选择。