将TextField绑定到ReadOnlyDoubleProperty

时间:2018-02-02 10:12:58

标签: java javafx

我可以将TextField的文字属性绑定到DoubleProperty,如下所示:

textField.textProperty().bindBidirectional(someDoubleProperty, new NumberStringConverter());

但是,如果我的someDoubleProperty是[{1}}而不是ReadOnlyDoubleProperty的实例呢?

我对双向绑定毫不感兴趣。我只使用这种方法,因为没有

这样的东西
DoubleProperty

我是否需要使用侦听器,或者是否也有“绑定解决方案”?

是否有像

这样的东西
textField.textProperty().bind(someDoubleProperty, new NumberStringConverter());

在那里?

2 个答案:

答案 0 :(得分:2)

对于单向绑定,您可以执行以下操作:

textField.textProperty().bind(Bindings.createStringBinding(
    () -> Double.toString(someDoubleProperty.get()),
    someDoubleProperty));

第一个参数是一个生成所需字符串的函数。如果您愿意,可以使用您选择的格式化程序。

第二个(以及任何后续)参数是要绑定的属性;即如果这些属性中的任何一个发生变化,绑定将失效(即需要重新计算)。

等效地,你可以做到

textField.textProperty().bind(new StringBinding() {
    {
        bind(someDoubleProperty);
    }

    @Override
    protected String computeValue() {
        return Double.toString(someDoubleProperty.get());
    }
});

答案 1 :(得分:0)

还有一种简单的单向绑定形式:

textField.textProperty().bind(someDoubleProperty.asString());