【问题标题】:Parse Exception MaskFormatter解析异常 MaskFormatter
【发布时间】:2014-08-14 21:27:35
【问题描述】:

我正在尝试将MaskFormatterJFormattedTextField 一起使用。

在我的课堂上我有这行代码

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


【解决方案1】:
  1. MaskFormatter 应创建为方法,无效。等等

  2. 阅读Initial Thread

  3. JFrame创建一个局部变量,不要在Swing中扩展任何东西,也不要为Top-Level Containers

  4. 搜索Java Naming Convention,例如类和构造函数名称应为 Test 而不是 test

.

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.text.*;

public class Test {

    private String formatString = "##/######";
    private MaskFormatter formatCNP = createFormatter(formatString);
    private JFormattedTextField jtfCNP = new JFormattedTextField(formatCNP);
    private JFrame frame = new JFrame("MaskFormatter Test");

    public Test() {
        jtfCNP.setColumns(20);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(jtfCNP);
        frame.pack();
        frame.setVisible(true);
    }

    MaskFormatter createFormatter(String format) {
        MaskFormatter formatter = null;
        try {
            formatter = new MaskFormatter(format);
            formatter.setPlaceholderCharacter('.'/*or '0' etc*/);
            formatter.setAllowsInvalid(false); // if needed
            formatter.setOverwriteMode(true); // if needed
        } catch (java.text.ParseException exc) {
            System.err.println("formatter is bad: " + exc.getMessage());
        }
        return formatter;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test tf = new Test();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 2020-08-31
    • 2016-05-24
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2013-07-27
    相关资源
    最近更新 更多