【问题标题】:JavaFX 2.2: how to bind String to Integer?JavaFX 2.2:如何将字符串绑定到整数?
【发布时间】:2013-03-13 00:34:42
【问题描述】:
我正在尝试以下代码,但无法编译:
SimpleIntegerProperty startPageProperty = new SimpleIntegerProperty();
TextField startPageField = new TextField();
Bindings.bindBidirectional(
startPageField.textProperty(), startPageProperty, new IntegerStringConverter()
);
最后的静态方法调用不接受这些参数。
【问题讨论】:
标签:
java
javafx
binding
javafx-2
【解决方案1】:
Bindings#bindBidirectional 需要 StringConverter[Number],您提供的是 StringConverter[Integer]。虽然它可能不直观,但您必须改用 NumberStringConverter。
Bindings.bindBidirectional(startPageField.textProperty(),
startPageProperty,
new NumberStringConverter());
【解决方案2】:
虽然前面的答案是正确的,但还有另一种方法可以解决这个问题,如果您想以特定方式(例如使用千位分隔符)格式化数字,这种方法会更好:
var formatter = new TextFormatter<>(new NumberStringConverter("#,###"));
formatter.valueProperty().bindBidirectional(startPageProperty);
startPageField.setTextFormatter(formatter);
使用TextFormatter 的优势在于,当文本字段失去焦点时,它将重新格式化用户输入的任何数字。