2017-02-06 8 views
0

私は、Val.selectVar(property, propertyOfProperty)のようなものを使用してプロパティのプロパティを含むプロパティへの依存関係を作成する方法を示しました。しかし、私は構成グラフに依存関係を作成し続ける方法を知りたい。そのプロパティのプロパティのプロパティのようになどここで マルチレベル合成バインディングの作成方法

は、私が知っているものの一例であり、私が欲しいもの:

import org.reactfx.value.Val; 
import org.reactfx.value.Var; 

import javafx.beans.property.IntegerProperty; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleIntegerProperty; 
import javafx.beans.property.SimpleObjectProperty; 

class Level1 { 
    private ObjectProperty<Level2> l2 = new SimpleObjectProperty<>(new Level2()); 
    ObjectProperty<Level2> l2Property() { return l2; } 
} 

class Level2 { 
    private ObjectProperty<Level3> l3 = new SimpleObjectProperty<>(new Level3()); 
    ObjectProperty<Level3> l3Property() { return l3; } 
} 

class Level3 { 
    private ObjectProperty<Level4> l4 = new SimpleObjectProperty<>(new Level4()); 
    ObjectProperty<Level4> l4Property() { return l4; } 
} 

class Level4 { 
    private IntegerProperty ip = new SimpleIntegerProperty(); 
    IntegerProperty ipProperty() { return ip; } 
} 

public class Example3 { 

    Example3() { 
     Level1 l1 = new Level1(); 
     Level2 l2 = l1.l2Property().get(); 
     Level3 l3 = l2.l3Property().get(); 
     Level4 l4 = l3.l4Property().get(); 
     Var<Number> ipVar = Val.selectVar(l3.l4Property(), Level4::ipProperty); 
     ipVar.addListener((ob, o, n) -> System.out.println(o + " -> " + n)); 

     l4.ipProperty().set(1); // prints "0 -> 1" 

     Level4 newL4 = new Level4(); 
     newL4.ipProperty().set(2); 
     l3.l4Property().set(newL4); // prints "1 -> 2" 

//  Something that does this 
//  ipVar2.listenTo(l2.l3Property(), l1.l2Property()); 
//  or this 
//  Var<Number> ipVar2 = Val.selectVarAll(l1.l2Property(), l2.l3Property(), l3.l4Property(), Level4::ipProperty); 

     Level3 newL3 = new Level3(); 
     l2.l3Property().set(newL3); // I want: prints "2 -> 0" 

//  level2 etc. 
    } 

    public static void main(String[] args) { 
     new Example3(); 
    } 
} 

は基本的に、私はどこかの変化によって時にプロパティの変更を知りたいですそれを含むプロパティーであり、直接的なものではありません。

答えて

1

Var<Number> ipVar2 = Val.selectVar(l1.level2Property(), Level2::level3Property) 
    .selectVar(Level3::level4Property) 
    .selectVar(Level4::ipProperty); 

はあなたが必要なものを与えるものではありませんか?

(あなただけの代わりにPropertyObservableValue必要がある場合 - あなただけの値に書き込みを観察しないようにする必要がある場合、すなわちを - 。あなたは全体flatMapの代わりselectVarを使用することができます)

+0

それがない、ありがとう!私は今質問したように、私はトップレベルから始めるべきであり、ボトムから始めるべきではないことを理解しています。 – Mark

関連する問題