Java jFormattedTextField的MaskFormatter中的部分匹配

Java jFormattedTextField的MaskFormatter中的部分匹配,java,swing,Java,Swing,如何设置MaskFormatter和JFormattedTextField以允许部分匹配 例如: 我希望用户能够使用此掩码“############”输入数字,因此如果用户输入“123456789123”,格式化程序将其更改为“12 345678 9123”(在第2和第8个字符后添加空格) 但是,我还希望用户能够输入'12346578',转换为'12 345678',并且仍然是一个有效值(因此我可以使用JFormattedTextField1.getValue()获取它) 这是我代码的一部分:

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

例如:

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

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

这是我代码的一部分:

JFormattedTextField jFormattedTextField1;
MaskFormatter mf;

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

我已尝试将focusLostBehavior设置为持久,以便在退出jFormattedTextField1后不清除该值,但这样,在使用调用jFormattedTextField1.getValue()时,我会得到一个null

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

JFormattedTextField jFormattedTextField1;
MaskFormatter mf;

mf = new MaskFormatter("** ****** ****");
mf.setValidCharacters("0123456789 ");
jFormattedTextField1.setFormatterFactory(new DefaultFormatterFactory(mf));
然后,我可以始终修剪使用getValue()获得的字符串,以删除尾随空格