JAVA / MaskFormatter:允许占位符

时间:2018-08-16 09:16:28

标签: java jformattedtextfield maskformatter

我使用以下代码,在我的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('_')


它确实可以使用“ **** **** **** **** **** **”进行工作,但这并不会迫使用户在给定位置输入有效字符,所以这并不是我真正想要的。

1 个答案:

答案 0 :(得分:0)

方法isValidCharacter()查找以下验证方法。我想,在下面的方法中设置适当的值就足够了

formatter.setValidCharacters("")
formatter.setInvalidCharacters("")