我有一个带有以下事件处理程序的javaFX文本字段:
public static EventHandler<KeyEvent> numericValidation(final Integer maxLengh) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
TextField txt_TextField = (TextField) e.getSource();
if (txt_TextField.getText().length() >= max_Lengh) {
e.consume();
}
if(!e.getCharacter().matches("[0-9]")){
e.consume();
}
}
};
}
...
yearTextField.addEventFilter(KeyEvent.KEY_TYPED , numeric_Validation(4));
这应该确保文本字段只能包含最多 maxLength
位的数字 . 问题是,如果我从文本字段中选择一些文本(某些数字)并尝试写其他数字,它就不会做任何事情 . 我希望所选文本替换为我正在编写的内容,就像它对基本文本字段一样,只要它是数字并且不会超过 maxLength
的长度 . 我怎样才能做到这一点?
1 回答
使用
TextFormatter
使用UnaryOperator
作为构造函数参数创建 . 此UnaryOperator
接收一个对象,其中包含将由输入产生的新文本以及其他信息 . 您可以返回影响结果的修改后的更改,或者只返回null
作为输入而不是修改TextField
.使用这种方法,如果您将多个数字复制并粘贴到
TextField
,您的代码也可以使用...例: