我使用以下代码,在我的JFormattedTextField
上应用MaskFormatter,以使其接受IBAN(2个字母后跟20个数字):
MaskFormatter formatter = new MaskFormatter("UU## #### #### #### #### ##");
formatter.setPlaceholderCharacter('_');
jFormattedTextField.setFormatterFactory(new DefaultFormatterFactory(formatter));
只要该文本字段中有空白,则占位符('_')会按预期保留该位置。但是,一旦将焦点放在另一个文本字段上,该字段将检查其中的String是否有效,否则将其重置。但是,我不希望它更改,例如:
AA00 11_1 2222 ____ 4444 5555 66
为了实现这一点,我必须在每个位置都允许使用占位符作为有效的MaskCharacter。通过复制整个类并修改isValidCharacter()
可以实现,但这很脏。
有没有办法做类似的事情?:
new MaskFormatter("[U^_][U^_][#^_][#^_] [#^_][#^_][#^_][#^_] [#^_][#^_][#^_][#^_] ...");
或者类似formatter.allowCharacter('_')
它确实可以使用“ **** **** **** **** **** **”进行工作,但这并不会迫使用户在给定位置输入有效字符,所以这并不是我真正想要的。
答案 0 :(得分:0)
方法isValidCharacter()
查找以下验证方法。我想,在下面的方法中设置适当的值就足够了
formatter.setValidCharacters("")
formatter.setInvalidCharacters("")