我有ObjectProperty
实例保留的自定义对象,该实例应绑定到StringProperty
的{{1}}。
如果我做了明显的事情并使用javafx.scene.text.Text
对象属性被绑定,text.textProperty().bind(..);
实际显示内容(我相信Text
的结果)。
但我确实需要修改toString
中实际显示的String
。
在哪里可以修改实际提供给绑定的值?
== 编辑 ==
在第一个修改之后,我创建了这个简单的测试应用程序:
text
两个输出都是' foo'而我期望第二个是' bar'。毕竟可能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
}
}
不是我想要的东西吗?
答案 0 :(得分:1)
您正在寻找Bindings.createStringBinding()
。
final ObjectProperty<CustomObject> objProperty;
text.textProperty.bind(Bindings.createStringBinding(() -> {
final CustomObject value = objProperty.getValue();
return value != null ? value.toString().toUpperCase() : "";
}, objProperty));