JavaFX - 将 ObjectProperty 绑定(bind)到另一个 ObjectProperty 内的成员?

标签 java javafx properties binding

我有一个名为Tree的类

public class Tree
{
    private Color c;

    public Color getColor()
    {
        return c;   
    }   
}

我有一个ObjectProperty...

ObjectProperty<Tree> importantTree = new SimpleObjectProperty();

我想创建另一个 Color 类型的 ObjectProperty,它始终等于 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.

最佳答案

只需使用绑定(bind):

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();
    }
};

如果你愿意的话。

关于JavaFX - 将 ObjectProperty 绑定(bind)到另一个 ObjectProperty 内的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910375/

相关文章:

javafx - 使用 javafx 将 DatePicker 中的日期变灰无法按预期工作

iphone - 与 Objective-C 中的头文件和实现文件混淆

java - Java 有静态泛型参数的好方法吗?

java - 如何声明返回泛型类的方法?

java - Android Facebook SDK Eclipse Proguard

java - 在 JavaFX 动画中模拟真实的弹跳

iphone - 在 CATransaction 中对自定义 CALayer 属性进行动画处理

java - 如何使用 JDBC 连接到本地主机?

java - 在java中使用scanner类来平均数字

javafx - 在javaFX中创建滑动式开/关“切换”按钮