Так что я, вероятно, здесь упускаю что-то очевидное, но у меня есть класс, у которого есть метод, который возвращает DoubleBinding своих переменных экземпляра:
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()));
Это прекрасно работает, и текстовый узел обновляется всякий раз, когда изменяется любое из свойств. Однако, если я попытаюсь сделать аналогичную привязку к другому SimpleDoubleProperty:
getSomeSimpleDoubleProperty().bind(attribute.getTotalBinding());
getSomeSimpleDoubleProperty().addListener(event -> {
System.out.println("Something changed");
});
Это не работает и не вызовет слушателя при изменении атрибута. Однако, если я связываюсь с каким-то случайным сингулярным свойством атрибута:
getSomeSimpleDoubleProperty().bind(attribute.itemModifierBaseProperty());
Это будет прекрасно обновляться. Таким образом, полная привязка работает, когда она используется в Bindings.format (), а не только .bind (). Может ли кто-нибудь объяснить мне, почему он не работает, и найти решение? Спасибо!