在MaskFormatter中为jFormattedTextField进行部分匹配

时间:2010-03-16 14:36:39

标签: java swing

如何设置MaskFormatter和JFormattedTextField以允许部分匹配?

例如:

我希望用户能够使用此掩码“## ###### ####”输入数字,因此如果用户输入“123456789123”,格式化程序会将其更改为“12 345678 9123”(它在第2和第8个字符后添加空格。)

但是,我也希望用户能够输入'12346578',转换为'12 345678'并仍然是一个有效值(所以我可以使用jFormatedTextField1.getValue()获取它

这是我的代码的一部分:

JFormattedTextField jFormattedTextField1;
MaskFormatter mf;

mf = new MaskFormatter("## ###### ####");
jFormattedTextField1.setFormatterFactory(new DefaultFormatterFactory(mf));

我已经尝试将focusLostBehavior设置为PERSIST,因此在退出jFormattedTextField1后该值不会被清除,但是当使用调用jFormattedTextField1.getValue()时,我得到一个null

1 个答案:

答案 0 :(得分:0)

通过使用星号设置遮罩并将其有效字符设置为数字和空格字符来解决此问题。

JFormattedTextField jFormattedTextField1;
MaskFormatter mf;

mf = new MaskFormatter("** ****** ****");
mf.setValidCharacters("0123456789 ");
jFormattedTextField1.setFormatterFactory(new DefaultFormatterFactory(mf));

然后我总是可以使用getValue()来修剪我得到的字符串,以便删除尾随空格。