Класс Bindings
предоставляет несколько полезных методов для достижения этой цели. Одним из таких методов является createDoubleBinding()
метод, который позволяет вам определять свой собственный код привязки.
То, что вы хотите здесь сделать, это связать val1
, используя метод Math.pow()
для вычисления степени. Math.pow()
принимает два аргумента: коэффициент мощности и значение, к которому он применяется:
val1.bind(Bindings.createDoubleBinding(() ->
Math.pow(2, val1.get()), val1));
Вот MCVE, которая демонстрирует концепцию:
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
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()), val1, factor));
System.out.println(result.get());
// Change the value for demonstration purposes
val1.set(6.0);
System.out.println(result.get());
}
}
При создании привязки важно отметить, что createDoubleBinding()
принимает аргумент varargs
, который позволяет вам указать все Observable
объекты, от которых зависит привязка. В вашем случае это было бы val2
, но в приведенном выше примере у меня также было пропущено свойство factor
.
Значение привязки будет обновлено только в случае изменения одного или нескольких зависимых свойств.
Большое спасибо VeeArr за помощь в решении моего вопроса при разработке этого ответа!