6

我正在尝试以下代码,但无法编译:

SimpleIntegerProperty startPageProperty = new SimpleIntegerProperty();

TextField startPageField = new TextField();

Bindings.bindBidirectional(
    startPageField.textProperty(), startPageProperty, new IntegerStringConverter()
);

最后一个静态方法调用不接受这些参数。

4

2 回答 2

13

Bindings#bindBidirectional期望 a StringConverter[Number],您正在提供StringConverter[Integer]. 虽然它可能不直观,但您必须使用 aNumberStringConverter代替。

Bindings.bindBidirectional(startPageField.textProperty(), 
                           startPageProperty, 
                           new NumberStringConverter());
于 2013-03-23T17:00:26.433 回答
1

虽然前面的答案是正确的,但还有另一种方法可以解决这个问题,如果您想以特定方式格式化数字(例如使用千位分隔符),这种方法会更好:

var formatter = new TextFormatter<>(new NumberStringConverter("#,###"));
formatter.valueProperty().bindBidirectional(startPageProperty);
startPageField.setTextFormatter(formatter);

使用 a 的好处TextFormatter是它会在文本字段失去焦点时重新格式化用户输入的任何数字。

于 2020-05-28T10:00:24.220 回答