2017-08-28 52 views
0

我有一個名爲TreeJavaFX - 將ObjectProperty綁定到另一個ObjectProperty中的成員?

public class Tree 
{ 
    private Color c; 

    public Color getColor() 
    { 
     return c; 
    } 
} 

類我有一個ObjectProperty ...

ObjectProperty<Tree> importantTree = new SimpleObjectProperty(); 

我要讓Color類型總是等於importantTree.get().getColor()的另一個ObjectProperty。每當Tree發生變化時,我都希望其他ObjectProperty更改爲Tree的顏色。

例如。

ObjectProperty<Tree> importantTree = new SimpleObjectProperty(); 
ObjectProperty<Color> importantTreesColor = ... 


Tree a = new Tree(Color.RED); 
Tree b = new Tree(Color.GREEN); 

importantTree.set(a); 
System.out.println(importantTreesColor.get()); // This should print RED. 

importantTree.set(b); 
System.out.println(importantTreesColor.get()); // This should print GREEN. 

回答

1

只需使用一個綁定:

ObjectProperty<Tree> importantTree = new SimpleObjectProperty(); 
Binding<Color> importantTreesColor = Bindings.createObjectBinding(() -> 
    importantTree.get() == null ? null : importantTree.get().getColor(), 
    importantTree); 

Tree a = new Tree(Color.RED); 
Tree b = new Tree(Color.GREEN); 

importantTree.set(a); 
System.out.println(importantTreesColor.getValue()); // Prints RED. 

importantTree.set(b); 
System.out.println(importantTreesColor.getValue()); // Prints GREEN. 

你也可以做

Binding<Color> importantTreesColor = new ObjectBinding<Color>() { 
    { bind(importantTree); } 
    @Override 
    protected Color computeValue() { 
     return importantTree.get()==null ? null : importantTree.get().getColor(); 
    } 
}; 

如果你喜歡。

+0

綁定與屬性有什麼區別? – Hatefiend

+0

通常可以設置屬性,並且大多數實現都包含實際值。綁定只是綁定到一個或多個其他可觀察值。請參閱相關的[文檔](http://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/Binding.html)或[tutorial](http://www.oracle.com)/PLS /主題/查找?CTX = javase80&ID = JFXBD107)。 –

+0

太棒了,我明白了。和往常一樣,你太棒了。我希望我能吸收你對JavaFX知道的所有信息 – Hatefiend

相關問題