【问题标题】:Max of two ObservableDoubleValue as an ObservableDoubleValue两个 ObservableDoubleValue 的最大值作为 ObservableDoubleValue
【发布时间】:2016-03-21 02:08:13
【问题描述】:

鉴于ObservableDoubleValue a 和ObservableDoubleValue b,我可以像这样得到它们的最大值:

NumberBinding m = Bindings.max(a,b);

获得DoubleBinding(甚至只是ObservableDoubleValue)而不是NumberBinding 的最简单方法是什么?

【问题讨论】:

    标签: java data-binding javafx javafx-8


    【解决方案1】:

    当您使用ObservableDoubleValue 参数之一调用Bindings.max 时,Bindings.max 将已经返回一个DoubleBinding 实例。

    因此,如果您确定自己属于这种情况,您可以将结果转换为 DoubleBinding。

    DoubleBinding max = (DoubleBinding) Bindings.max(a,b);
    

    更具体地说,返回的NumberBinding 是:

    • DoubleBinding 如果参数之一是 ObservableDoubleValue。
    • 如果参数之一是ObservableFloatValue,则为FloatBinding。
    • 如果参数之一是ObservableLongValue,则为LongBinding。
    • 否则IntegerBinding。

    这在NumberExpressionJavadoc 中有记录:

    此 API 允许在定义算术运算时混合类型。结果的类型由与 Java 语言中相同的规则定义。

    • 如果其中一个操作数是双精度,则结果是双精度。
    • 如果不是并且其中一个操作数是浮点数,则结果是浮点数。
    • 如果不是并且其中一个操作数是长整数,则结果是长整数。
    • 否则结果为整数。

    【讨论】:

      【解决方案2】:

      您可以创建自己的绑定:

      DoubleProperty a = ...
      DoubleProperty b = ...
      DoubleBinding maxBinding= new DoubleBinding() {
      
           {
               super.bind(a, b);
           }
      
           @Override
           protected double computeValue() {
               return Math.max(a.doubleValue(), b.doubleValue());
           }
      
           @Override
           public void dispose() {
               super.unbind(a, b);
           }
       };
      

      另请参阅DoubleBinding 的 JavaDoc。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多