【问题标题】:JavaFX - Bind ObjectProperty to member inside another ObjectProperty?JavaFX - 将 ObjectProperty 绑定到另一个 ObjectProperty 中的成员?
【发布时间】:2018-02-05 05:08:40
【问题描述】:

我有一个班级叫Tree

public class Tree
{
    private Color c;

    public Color getColor()
    {
        return c;   
    }   
}

我有一个ObjectProperty...

ObjectProperty<Tree> importantTree = new SimpleObjectProperty();

我想创建另一个ObjectProperty 类型的Color,它总是等于importantTree.get().getColor()。每当树发生变化时,我希望其他 ObjectProperty 更改为该树的颜色。

例如。

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.

【问题讨论】:

    标签: java javafx properties binding


    【解决方案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();
        }
    };
    

    如果你愿意的话。

    【讨论】:

    • 绑定和属性有什么区别?
    • 一般可以设置一个属性,大多数实现都包含实际值。绑定只是绑定到一个或多个其他可观察值的东西。请参阅相关的documentationtutorial
    • 太棒了,我明白了。和往常一样,你很了不起。我希望我能吸收你所知道的关于 JavaFX 的所有信息哈哈
    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2018-03-17
    • 2012-11-28
    • 2018-11-26
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多