代码之家  ›  专栏  ›  技术社区  ›  AlwaysNeedingHelp

doubleBinding使用bindings.format()但不使用bind()

  •  0
  • AlwaysNeedingHelp  · 技术社区  · 8 年前

    所以我可能遗漏了一些显而易见的东西,但是我有一个类,它有一个返回实例变量双绑定的方法:

    public DoubleBinding getTotalBinding(){
            DoubleProperty h = new SimpleDoubleProperty(100);     //100
            DoubleProperty a1 = baseValueProperty();              // Base
            DoubleProperty aib = itemModifierBaseProperty();      // Item base change
            DoubleProperty aip = itemModifierPercentProperty();   // Item percent change
            DoubleProperty atb = titleModifierBaseProperty();     // Title base change
            DoubleProperty atp = titleModifierPercentProperty();  // Title percent change
            DoubleProperty abb = buffModifierBaseProperty();      // Buff base change
            DoubleProperty abp = buffModifierPercentProperty();   // Buff percent change
    
            return Bindings.createDoubleBinding(
                    () -> a1.add(aib.add(atb.add(abb))).multiply((h.add(aip.add(atp.add(abp)))).divide(h)).get()
            );
        }
    

    现在,当我使用此绑定绑定到文本节点时:

    total.textProperty().bind(Bindings.format("%.0f", attribute.getTotalBinding()));
    

    这样可以正常工作,只要更改了任何属性,文本节点就会更新。然而,如果我试图做一个类似的绑定到另一个简单的双重属性:

    getSomeSimpleDoubleProperty().bind(attribute.getTotalBinding());
    getSomeSimpleDoubleProperty().addListener(event -> {
                    System.out.println("Something changed");
                });
    

    这不起作用,也不会在更改属性时触发侦听器。但是,如果我绑定到属性的某个随机奇异属性:

    getSomeSimpleDoubleProperty().bind(attribute.itemModifierBaseProperty());
    

    这将很好地更新。因此,当在binding s.format()中使用total绑定时,它会起作用,但不只是.bind()。有人能给我解释一下为什么它不能工作并找出解决办法吗?谢谢!

    1 回复  |  直到 8 年前
        1
  •  0
  •   AlwaysNeedingHelp    8 年前

    通过在doubleBinding构造函数中添加依赖项修复了此问题。

    return Bindings.createDoubleBinding(
                    () -> a1.add(aib.add(atb.add(abb))).multiply((h.add(aip.add(atp.add(abp)))).divide(h)).get(),
                    a1,aib,aip,atb,atp,abb,abp
            );