Bind TextField to ReadOnlyDoubleProperty

java, javafx

Solution

For a unidirectional binding, you can do:

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

The first argument is a function generating the string you want. You could use a formatter of your choosing there if you wanted.

The second (and any subsequent) argument(s) are properties to which to bind; i.e. if any of those properties change, the binding will be invalidated (i.e. needs to be recomputed).

Equivalently, you can do

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

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

Problem

I can bind a `TextField`'s text property to a `DoubleProperty`, like this: ``` textField.textProperty().bindBidirectional(someDoubleProperty, new NumberStringConverter()); ``` But what if my `someDoubleProperty` is an instance of `ReadOnlyDoubleProperty` instead of `DoubleProperty`? I am acutally not interested in a bidirectional binding. I use this method only because there is no such thing as ``` textField.textProperty().bind(someDoubleProperty, new NumberStringConverter()); ``` Do I need to use listeners instead or is there a "binding-solution" for that as well? Is there somthing like ``` textField.textProperty().bind(someDoubleProperty, new NumberStringConverter()); ``` out there?

Original source