DoubleBinding работает с Bindings.format (), но не bind () - PullRequest
0 голосов
/ 05 июля 2018

Так что я, вероятно, здесь упускаю что-то очевидное, но у меня есть класс, у которого есть метод, который возвращает 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 (). Может ли кто-нибудь объяснить мне, почему он не работает, и найти решение? Спасибо!

1 Ответ

0 голосов
/ 05 июля 2018

Исправлено путем добавления зависимостей в конструкторе 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
        );
...