【发布时间】:2014-08-14 21:27:35
【问题描述】:
我正在尝试将MaskFormatter 与JFormattedTextField 一起使用。
在我的课堂上我有这行代码
JFormattedTextField jtfCNP=new JFormattedTextField(new MaskFormatter(formatCNP));
当我编译时,我得到了ParseException。我发现解决它的唯一方法是在我的 GUI 面板的构造函数中创建 MaskFormatter 的实例,在这样的 try 块内
try { format_cnp=new MaskFormatter("# ###### ######");
jtf_cnp=new JFormattedTextField(format_cnp);
} catch (ParseException pex) {}
jtf_cnp.setColumns(20);
我想要 MaskFormatter 的功能,但没有办法在方法之外实例化它吗?另外,有没有比MaskFormatter更好的选择?
编辑:不起作用的示例代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import javax.swing.text.*;
public class test extends JFrame{
String formatCNP="# ###### ######";
//components
JFormattedTextField jtfCNP=new JFormattedTextField(new MaskFormatter(formatCNP));
public test(){
super("MaskFormatter Test");
setSize(300,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtfCNP.setColumns(20);
add(jtfCNP);
setVisible(true);
}
public static void main(String[] args){
test tf=new test();
}
}
【问题讨论】:
-
从这里发布的代码中不知道,以
new MaskFormatter(formatCNP)开头不符合format_cnp=new MaskFormatter("# ###### ######"); -
+1 用于使用 SSCCE/MCVE 进行编辑,请参阅我对您问题的回答
-
“我发现唯一的解决方法是在我的 GUI 面板的构造函数中创建 MaskFormatter 的实例,在这样的 try 块中” - EEK!所以你用一个空的catch将它包装在一个try/catch中?可怕。如果您确实得到解析异常怎么办?你可能是,但你不能说,因为你正在吞下异常。您需要处理异常的原因是因为如果您传递的 String 包含非法字符(您的字符串 - 不允许使用空格),它将引发异常。
-
查看the api了解更多详情
标签: java swing jformattedtextfield parseexception javax.swing.text