1

考虑以下情况:

我将 a 的字符串属性绑定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-event 以进行方便的无限递归。我该如何解决这个问题?

4

1 回答 1

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; 
   }
}

我不喜欢后一种方式,但看起来别无选择。

于 2013-08-02T07:55:11.457 回答