在MyTextFieldMaxLength2中键入时:
a)' 1'标记并点击数字9 =>将被替换=' 9' ......好的
b)' 12'标记并点击数字9 =>没有任何反应
即使标记了所有两个数字,如何将其替换为新数字?
public class MyTextFieldMaxLength2 extends TextField {
public boolean ifCondition_validate(String text) {
return (getText().length() < 2 || text.equals("")) && text.matches("[0-9]*");
}
@Override
public void replaceText(int start, int end, String text) {
if ( ifCondition_validate(text) ) {
super.replaceText(start, end, text);
}
}
@Override
public void replaceSelection(String text) {
if ( ifCondition_validate(text) ) {
super.replaceSelection(text);
}
}
}
答案 0 :(得分:1)
您可以通过在标准文本字段上设置TextFormatter
而不是为文本字段创建子类来轻松完成此操作:
TextField textField = new TextField();
UnaryOperator<TextFormatter.Change> filter = c -> {
String proposedText = c.getControlNewText();
if (proposedText.matches("[0-9]{0,2}")) {
return c ;
} else {
return null ;
}
};
textField.setTextFormatter(new TextFormatter<String>(filter));