Bidirectional bindings of different properties
Solution 1
Simple matter of type confusion
Bindings.bindBidirectional(textProp, intProp, new IntegerStringConverter());
Should be:
Bindings.bindBidirectional(textProp, intProp, new NumberStringConverter());
Solution 2
i had a similar problem. I tried to convert a string into a File-Object and back. But i used Bindings.bindBidirectional(...,...,java.text.Format). The conversion from the string to file worked as expected but in the other direction the result was null. I tried it with your example, same Result! I think there is a bug in the binding mechanism, or maybe my implementation of java.text.Format is wrong..
package de.ludwig.binding.model;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import javafx.beans.binding.Bindings;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
public class BidirectionalBinding {
public static void main(String[] args) {
SimpleIntegerProperty intProp = new SimpleIntegerProperty();
SimpleStringProperty textProp = new SimpleStringProperty();
Bindings.bindBidirectional(textProp, intProp, new Format() {
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
return toAppendTo.append(obj.toString());
}
@Override
public Object parseObject(String source, ParsePosition pos) {
return Integer.parseInt(source);
}
});
intProp.set(2);
System.out.println(textProp);
textProp.set("8");
System.out.println(intProp);
}
}
The only way to get things working as expected was to implement StringConverter as recommended by Hendrik Ebbers. Thank you for this tip!
Solution 3
I tried your code in Eclipse and had to cast the converter. Then everything looks ok:
public class BiderectionalBinding {
public static void main(String[] args) {
SimpleIntegerProperty intProp = new SimpleIntegerProperty();
SimpleStringProperty textProp = new SimpleStringProperty();
StringConverter<? extends Number> converter = new IntegerStringConverter();
Bindings.bindBidirectional(textProp, intProp, (StringConverter<Number>)converter);
intProp.set(2);
System.out.println(textProp);
textProp.set("8");
System.out.println(intProp);
}
}
The output is:
StringProperty [value: 2]
IntegerProperty [value: 8]
dethlef1
Updated on July 29, 2022Comments
-
dethlef1 over 1 year
I just tried to bind a Integer and a String property. After some googling this should be possible with one of the two provided methods:
public static void bindBidirectional(Property stringProperty,
Property otherProperty, StringConverter converter)public static void bindBidirectional(Property stringProperty,
Property otherProperty, java.text.Format format)
Unluckily this does not seem to work for me. What am I doing wrong?
import java.text.Format; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.util.converter.IntegerStringConverter; public class BiderectionalBinding { public static void main(String[] args) { SimpleIntegerProperty intProp = new SimpleIntegerProperty(); SimpleStringProperty textProp = new SimpleStringProperty(); Bindings.bindBidirectional(textProp, intProp, new IntegerStringConverter()); intProp.set(2); System.out.println(textProp); textProp.set("8"); System.out.println(intProp); } }
-
dethlef1 over 11 yearsPerfect, thank you. I got also other helpful answers at forums.oracle.com/forums/message.jspa?messageID=10773242
-
Hendrik Ebbers over 11 yearsFor more informations about the JavaFX Property API read docs.oracle.com/javafx/2/api/javafx/beans/binding/Bindings.html
-
BBdev about 11 yearsWhy dont you add that part into your code so this answer become useful for others. Other wise this is not a good answer if some one is looking for that same issue.
-
pateksan over 3 yearsDo you mean it's a bug in Java, the OP's code, the OP's IDE, or elsewhere?