[英]javafx bidirectional change notification won't work?
考虑以下情况:
我将TextField
的字符串属性绑定到浮点属性:
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
,将触发更改事件以进行方便的无穷递归。 我该如何解决这个问题?
对我来说,它曾在年初做此项检查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;
}
}
我不喜欢后者,但似乎别无选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.