user5182503
user5182503

Reputation:

How to bind StringProperty to ObjectProperty<Integer> in JavaFX?

I found only solution how to bind StringProperty to IntegerProperty, something like this:

StringProperty.bindBidirectional(IntegerProperty, new NumberStringConverter());

But I need also null value. How to bind StringProperty to ObjectProperty<Integer>?

Upvotes: 3

Views: 3102

Answers (1)

Sergey Grinev
Sergey Grinev

Reputation: 34518

Default IntegerStringConverter understand nulls:

ObjectProperty<Integer> objP = new SimpleObjectProperty<>();
stringProp.bindBidirectional(objP, new IntegerStringConverter());

objP.setValue(null); // stringProp == ""
stringProp.setValue(""); // objP == null

If you want different behaviour you can make your own converter:

    ObjectProperty<Integer> objP = new SimpleObjectProperty<>();
    stringProperty.bindBidirectional(objP, new StringConverter<Integer>() {
        @Override
        public String toString(Integer number) {
            return number == null ? "NULL" : number.toString();
        }

        @Override
        public Integer fromString(String string) {
            return string.equals("NULL") ? null : Integer.valueOf(string); 
        }
    });

    // both works:
    objP.setValue(null);
    objP.setValue(100);

Upvotes: 3

Related Questions