我正在尝试制作一个小程序,用于在JavaFX中搜索词汇表中的单词。我有一个TextField,用户可以在其中指定搜索到的单词。如果有空格,搜索将不起作用。我试图使用TextFormatter从那里删除空格。
searchField.setTextFormatter(new TextFormatter<String>((Change change) -> {
String newText = change.getControlNewText();
if (newText.matches(" ")) {
change.setText(change.getText().replace(" ", ""));
return change;
}
if (newText.matches("[A-Z]*")) {
change.setText(change.getText().toLowerCase());
return change;
}
return change;
}));
答案 0 :(得分:1)
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);