У меня есть TextField, которому был присвоен TextFormatter, который имеет фильтр, который принимает ввод текстового поля и гарантирует, что он в двойном формате. Затем он использует DoubleStringConverter для преобразования отфильтрованного текста в двойное значение. Это в пользовательском компоненте F XML. Ниже приведен минимальный пример.
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));
}
}
Другой компонент F XML, который использует этот компонент ...
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. Какой смысл использовать DoubleStringConverter для преобразования значения, если нет простого способа извлечь это значение из TextField? Я мог бы использовать Double.parseDouble(inputField.getText())
, но это кажется бессмысленным, если я уже столкнулся с проблемой настройки хорошего TextFormatter для поля.
Как использовать valueProperty TextFormatter вне SomeComponent?