Java 如何动态更改格式化的TextField掩码?

Java 如何动态更改格式化的TextField掩码?,java,swing,Java,Swing,所以我有一个格式化的文本字段 JFormattedTextField myFtf = new JFormattedTextField(); 它有下面的掩码,放在我的应用程序构造函数中 try { myFtf.setFormatterFactory( new DefaultFormatterFactory( new MaskFormatter("###.###.###-##"))); } catch (java.text.ParseException

所以我有一个格式化的文本字段

JFormattedTextField myFtf = new JFormattedTextField();
它有下面的掩码,放在我的应用程序构造函数中

try {
    myFtf.setFormatterFactory(
        new DefaultFormatterFactory(
           new MaskFormatter("###.###.###-##")));
} catch (java.text.ParseException ex) {
    ex.printStackTrace();
}
然后,我有两个单选按钮,应该在
myFtf
中更改掩码格式化程序

我尝试了以下方法:

private radioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    try {
        myFtf.setFormatterFactory(
            new DefaultFormatterFactory(
                new MaskFormatter("###.###.###-##")));
    } catch (Exception e) {
        e.printStackTrace();
    }
}                                                 

private void radioButton2ActionPerformed(java.awt.event.ActionEvent evt) {                      
    try {
        myFtf.setFormatterFactory(
            new DefaultFormatterFactory(
               new MaskFormatter("##.###.###/####-##")));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
这很好,直到我尝试在文本字段中有输入时更改它们的掩码。如果有,它不会再改变面具。以下是几张照片:


OK场景:

img a:

切换单选按钮给了我以下信息:

img b:


错误场景:

img c:

切换单选按钮给了我以下信息:

img d:

我希望img d和img a完全一样



如何正确地动态更改其掩码?

将您的操作侦听器更改为:

private radioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    try {
        myFtf.setFormatterFactory(
            new DefaultFormatterFactory(
                new MaskFormatter("###.###.###-##")));
        myFtf.setText("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}                                                 

private void radioButton2ActionPerformed(java.awt.event.ActionEvent evt) {                      
    try {
        myFtf.setFormatterFactory(
            new DefaultFormatterFactory(
               new MaskFormatter("##.###.###/####-##")));
        myFtf.setText("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
这将清除文本字段。
祝你好运

我让它正常工作了!我所需要做的就是添加一个

myFtf.setValue(null);

设置新的格式化程序工厂后
myFtf.setText(“”
未按预期工作,但这是一个近景!:-)

在第二个场景中,您期望得到什么结果?与第一个相同?@user1803551是的,清除了没有输入的框并更正了mask谢谢你的答案,但不幸的是我仍然得到了相同的行为。