Как привязать значение к результату расчета? - PullRequest
0 голосов
/ 06 июля 2018

Предположим, у меня есть два свойства, и я хочу связать 3-е, чтобы быть равным вычислению между ними.

В этом примере у меня есть свойство val1 и factor. Я хочу, чтобы свойство result было привязано к "силе" двух: result = Math.pow(factor, val1)

Следующий MCVE показывает, как я сейчас пытаюсь это сделать, но он не связан должным образом.

import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;

public class Main {

    private static DoubleProperty val1 = new SimpleDoubleProperty();
    private static DoubleProperty factor = new SimpleDoubleProperty();
    private static DoubleProperty result = new SimpleDoubleProperty();

    public static void main(String[] args) {

        // Set the value to be evaluated
        val1.set(4.0);
        factor.set(2.0);

        // Create the binding to return the result of your calculation
        result.bind(Bindings.createDoubleBinding(() ->
                Math.pow(factor.get(), val1.get())));

        System.out.println(result.get());

        // Change the value for demonstration purposes
        val1.set(6.0);
        System.out.println(result.get());
    }
}

Выход:

16.0
16.0

Таким образом, это, кажется, изначально правильно связывается, но result не обновляется при изменении либо val1, либо factor.

Как правильно связать этот расчет?

1 Ответ

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

Метод Bindings.createDoubleBinding в дополнение к Callable<Double> принимает переменную Observable, представляющую зависимости привязки. Привязка обновляется только при изменении одной из перечисленных зависимостей. Поскольку вы ничего не указали, привязка никогда не обновляется после создания.

Чтобы исправить вашу проблему, используйте:

result.bind(Bindings.createDoubleBinding(
    () -> Math.pow(factor.get(), val1.get()),
    val1, 
    factor));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...