繁体   English   中英

javafx双向更改通知不起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM