将 TextField 绑定到 ReadOnlyDoubleProperty

ker*_*000 6 java javafx

我可以将 aTextField的 text 属性绑定到 a DoubleProperty,如下所示:

textField.textProperty().bindBidirectional(someDoubleProperty, new NumberStringConverter());
Run Code Online (Sandbox Code Playgroud)

但是如果 mysomeDoubleProperty是一个ReadOnlyDoubleProperty而不是的实例DoubleProperty呢?

我实际上对双向绑定不感兴趣。我使用这种方法只是因为没有这样的事情

textField.textProperty().bind(someDoubleProperty, new NumberStringConverter());
Run Code Online (Sandbox Code Playgroud)

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

有没有像

textField.textProperty().bind(someDoubleProperty, new NumberStringConverter());
Run Code Online (Sandbox Code Playgroud)

在那里?

Jam*_*s_D 8

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

textField.textProperty().bind(Bindings.createStringBinding(
    () -> Double.toString(someDoubleProperty.get()),
    someDoubleProperty));
Run Code Online (Sandbox Code Playgroud)

第一个参数是一个生成你想要的字符串的函数。如果需要,您可以在那里使用您选择的格式化程序。

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

同样,你可以做

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

    @Override
    protected String computeValue() {
        return Double.toString(someDoubleProperty.get());
    }
});
Run Code Online (Sandbox Code Playgroud)