Java 如何绑定到多个可观察的ReactFX?

Java 如何绑定到多个可观察的ReactFX?,java,javafx,binding,reactfx,Java,Javafx,Binding,Reactfx,在常规JavaFX中,我会在2个或更多观察对象上创建一个绑定,如下所示: xxxProperty().bind(Bindings.createObjectBinding(() -> {...}, observable1, observable2, ...)); xxxProperty().bind(val.map(value -> {...})); 在ReactFx中,我可以创建如下绑定: xxxProperty().bind(Bindings.createObjectBindi

在常规JavaFX中,我会在2个或更多观察对象上创建一个绑定,如下所示:

xxxProperty().bind(Bindings.createObjectBinding(() -> {...}, observable1, observable2, ...));
xxxProperty().bind(val.map(value -> {...}));
在ReactFx中,我可以创建如下绑定:

xxxProperty().bind(Bindings.createObjectBinding(() -> {...}, observable1, observable2, ...));
xxxProperty().bind(val.map(value -> {...}));

但是如何在2个或多个ReactFX可观测值Val和/或Var上创建绑定?

对于一般情况,请使用以下其中一种:

static <T> Val<T> create(Supplier<? extends T> computeValue, EventStream<?> invalidations)
static <T> Val<T> create(Supplier<? extends T> computeValue, Observable... dependencies)
对于组合2-6个值,提供了方便的方法:

static <A,B,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, BiFunction<? super A,? super B,? extends R> f)
static <A,B,C,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, TriFunction<? super A,? super B,? super C,? extends R> f)
static <A,B,C,D,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, TetraFunction<? super A,? super B,? super C,? super D,? extends R> f)
static <A,B,C,D,E,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, PentaFunction<? super A,? super B,? super C,? super D,? super E,? extends R> f)
static <A,B,C,D,E,F,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, ObservableValue<F> src6, HexaFunction<? super A,? super B,? super C,? super D,? super E,? super F,? extends R> f)

所有这些都是打开的静态方法。

非常好!如果我想要一个类似的Var,我只需执行上面的操作,然后根据结果Val创建一个Var?我也要亲自感谢您的ReacFX。它似乎为我解决了不少问题。我唯一的抱怨是缺少javadoc或好的教程。这是一个高级库,我会这么说,这会有很大帮助。这取决于你所说的一个变量的相似性。当你使用函数f映射或组合多个变量的值时,通常f是不可逆的,因此,当您在输出变量上调用setValue时,通常没有很好地定义应该对输入变量执行的操作。如果在您的情况下,它定义得很好,则使用来执行此操作,即更改输入,从而使输出更改为所需的值。或者,您可能只是希望能够手动覆盖计算值。在这种情况下,只需创建一个新的Var并根据组合的Val进行更新,也可以手动进行更新。很高兴你喜欢我。是的,文档是一场永恒的斗争……是的,Val.asVar是我的意思。没有考虑可逆性。你在这个项目上有合作者吗?也许可以找人帮忙做文档。小心使用联合收割机。如果其中任何一个值为null,则该值上的侦听器将永远不会触发。任何可以为null的值都必须用val.orElseConstx包装。。。这是一个陷阱,已经抓住我好几次了。