Свойство controlNewText
содержит весь текст после редактирования.Единственный случай, когда это может соответствовать " "
, это если вы начинаете с пустого TextField
и нажимаете пробел.Единственный случай, когда это соответствует "[A-Z]*"
, - это когда все символы в TextField
прописные;он не совпадает, если содержимое TextField
равно foo
и вы добавляете B
.
Также необходимо учитывать, что
- пользователь может копировать и вставлять текст в
TextField
, в результате чего свойство text
содержит более одного символа - Можно выбрать несколько символов, и фиксированный текст может не соответствовать исходному редактированию по длине, требуя от васотрегулируйте диапазон выбора
Это должно удовлетворить ваши требования (или, по крайней мере, подойти достаточно близко, чтобы закончить код самостоятельно):
TextField textField = new TextField();
TextFormatter<?> formatter = new TextFormatter<>((TextFormatter.Change change) -> {
String text = change.getText();
// if text was added, fix the text to fit the requirements
if (!text.isEmpty()) {
String newText = text.replace(" ", "").toLowerCase();
int carretPos = change.getCaretPosition() - text.length() + newText.length();
change.setText(newText);
// fix carret position based on difference in originally added text and fixed text
change.selectRange(carretPos, carretPos);
}
return change;
});
textField.setTextFormatter(formatter);