所以我可能遗漏了一些显而易见的东西,但是我有一个类,它有一个返回实例变量双绑定的方法:
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()。有人能给我解释一下为什么它不能工作并找出解决办法吗?谢谢!