【发布时间】:2020-03-20 05:12:07
【问题描述】:
我有一个 TextField,它被赋予了一个 TextFormatter,它有一个过滤器,它接受文本字段的输入,并确保它是双重格式。然后它使用 DoubleStringConverter 将过滤后的文本转换为双精度值。这是在自定义 FXML 组件中。请参阅下面的最小示例。
public SomeComponent implements Initializable {
@FXML
public TextField inputField;
public int min;
public void initialize(URL location, ResourceBundle resources) {
UnaryOperator<TextFormatter.Change> doubleFilter = change -> {
String newText = change.getControlNewText();
if (newText.matches("-?[0-9]{1,13}(\\.[0-9]*)?")) {
return change;
}
return null;
};
inputField.setTextFormatter(new TextFormatter<>(new DoubleStringConverter(), min, doubleFilter));
}
}
另一个使用该组件的 FXML 组件...
public SomeView implements Initializable {
@FXML
SomeComponent comp;
public void initialize(URL location, ResourceBundle resources) {
comp.inputField.getTextFormatter().valueProperty().bindBidirectional(SomeDataManagerClass.SomeSimpleDoubleProperty());
}
}
bindBidirectional() 正在尝试将 TextField 的转换值绑定到存在于别处的 SimpleDoubleProperty。但这会返回以下错误:
method Property.bindBidirectional(Property<CAP#1>) is not applicable
(argument mismatch; SimpleDoubleProperty cannot be converted to Property<CAP#1>)
基本上我想利用 TextField 的值(不是getText(),而是转换后的值)绑定到其他属性。
我意识到使用 TextFormatter 捕获的类型推断存在问题,但我在 JavaDocs 中看不到任何地方显示如何使用 TextFormatter 的双精度值。如果没有简单的方法从 TextField 中提取双精度值,那么使用 DoubleStringConverter 转换值有什么意义?我可以使用Double.parseDouble(inputField.getText()),但如果我已经麻烦为该字段设置了一个不错的 TextFormatter,这似乎毫无意义。
如何在 SomeComponent 之外使用 TextFormatter 的 valueProperty?
【问题讨论】: