【问题标题】:How to bind two SimpleDoubleProperty's with a mathematical operation?如何用数学运算绑定两个 SimpleDoubleProperty?
【发布时间】:2018-11-16 14:23:48
【问题描述】:

我可以很容易地将 SimpleDoubleProperty 绑定到一些文本:

getSomeTextProperty().bind(Bindings.format("%,.0f", getSomeDoubleProperty()));

是否可以做一些事情来达到以下效果:

getSomeTextProperty().bind(Bindings.format("%,.0f", getSomeDoubleProperty()+getAnotherDoubleProperty()));

这个想法是每当 someDoubleProperty anotherDoubleProperty 发生变化时,文本会随着它们两者的加法(或减法或乘法等)而更新。

【问题讨论】:

    标签: java javafx data-binding binding


    【解决方案1】:

    Bindings.format 创建的StringExpression 会在其中一个参数是更改的ObservableValue 时更新。 DoubleProperty.add 创建了这样一个对象。

    DoubleProperty v1 = new SimpleDoubleProperty();
    DoubleProperty v2 = new SimpleDoubleProperty();
    StringExpression sb = Bindings.format("%,.3f", v1.add(v2));
    System.out.println(sb.get());
    sb.addListener((a, b, newValue) -> System.out.println(newValue));
    v1.set(3);
    v2.set(5.5);
    

    【讨论】:

    • 这可以扩展到三个属性的吗?甚至扩展到 n 个属性?
    • 如果有这么多属性,Bindings.createDoubleBinding 可能是更好的选择,但通常调用add n-1 次应该可以工作...
    • 如 v1.add(v2.add(v3.add(v4)));等等?
    • @AlwaysNeedingHelp 对于“完整性”,与答案相同的另一种方法是:v1.add(v2).asString("%,.3f");。至于三个或更多属性,而不是v1.add(v2.add(v3.add(v4))); 你可以做v1.add(v2).add(v3).add(v4); 我认为更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2012-06-30
    相关资源
    最近更新 更多