JavaFX8:自定义对象的属性绑定

JavaFX8:自定义对象的属性绑定,javafx,javafx-8,Javafx,Javafx 8,我有一个由ObjectProperty实例持有的自定义对象,它应该绑定到javafx.scene.text.text的StringProperty 如果我做了显而易见的事情并使用text.textProperty().bind(…)对象属性被绑定,文本实际上显示内容(我相信toString的结果) 但是我确实需要修改字符串,它实际上显示在文本中 在哪里可以修改实际提供给绑定的值 =编辑== 在第一次回答之后,我创建了这个简单的测试应用程序: import javafx.beans.binding

我有一个由
ObjectProperty
实例持有的自定义对象,它应该绑定到
javafx.scene.text.text
StringProperty

如果我做了显而易见的事情并使用
text.textProperty().bind(…)
对象属性被绑定,
文本实际上显示内容(我相信
toString
的结果)

但是我确实需要修改
字符串
,它实际上显示在
文本中

在哪里可以修改实际提供给绑定的值

=编辑==

在第一次回答之后,我创建了这个简单的测试应用程序:

import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;


public class BindingsTest {
    public static void main(String... args) {
        final ObjectProperty<Foo> foo = new SimpleObjectProperty<>();
        foo.set(Foo.FOO);

        final StringProperty textProperty = new SimpleStringProperty();
        textProperty.bind(Bindings.createStringBinding(() -> foo.get().name().toLowerCase()));

        System.out.println(textProperty.get());

        foo.set(Foo.BAR);

        System.out.println(textProperty.get());

    }

    private enum Foo {
        FOO, BAR
    }
}
导入javafx.beans.binding.Bindings;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.SimpleObject属性;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.beans.property.StringProperty;
公共类绑定测试{
公共静态void main(字符串…参数){
final ObjectProperty foo=新的SimpleObjectProperty();
foo.set(foo.foo);
final StringProperty textProperty=新的SimpleStringProperty();
textProperty.bind(Bindings.createStringBinding(()->foo.get().name().toLowerCase());
System.out.println(textProperty.get());
foo.set(foo.BAR);
System.out.println(textProperty.get());
}
私有枚举Foo{
富,酒吧
}
}
两个输出都是“foo”,而我希望第二个输出是“bar”。所以毕竟可能是
绑定。createStringBinding(..)
不是我要找的?

您要找的

final ObjectProperty objProperty;
text.textProperty.bind(Bindings.createStringBinding(()->{
最终CustomObject值=objProperty.getValue();
返回值!=null?值。toString().toUpperCase():“”;
},对象属性);

我相信这不是我想要的;我修改了我的问题。你为什么不试一下答案中的方法呢???也就是说,指定
foo
作为
createStringBinding()
的第二个参数?@James_D Oh我甚至没有看到-这个Lambda的东西仍然让我困惑;我认为我正确地复制了这个解决方案,这就是我在这里发布它的原因:-)您没有指定
foo
作为它的依赖项<代码>绑定。createStringBinding()
需要观察
foo
中的更改,以便知道何时使自身失效。
final ObjectProperty<CustomObject> objProperty;
text.textProperty.bind(Bindings.createStringBinding(() -> {
    final CustomObject value = objProperty.getValue();
    return value != null ? value.toString().toUpperCase() : "";
}, objProperty));