Java如何使用JFormattedTextField格式化用户输入?

将JFormattedTextField允许我们创建一个文本字段,可以接受一个格式化的输入。在此示例中,我们创建了两个格式化的文本字段,它们接受有效的号码和日期。

package org.nhooo.example.swing;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.text.DateFormatter;
import javax.swing.text.MaskFormatter;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FormattedTextFieldExample extends JFrame {
    public FormattedTextFieldExample() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new FormattedTextFieldExample().setVisible(true));
    }

    private void initComponents() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(new Dimension(200, 200));
        getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));

        MaskFormatter mask = null;
        try {
            // 创建一个MaskFormatter接受号码,#符号接受
            //只有一个数字。我们也可以使用占位符设置空值
            // 字符。
            mask = new MaskFormatter("(###) ###-####");
            mask.setPlaceholderCharacter('_');
        } catch (ParseException e) {
            e.printStackTrace();
        }

        // 创建一个接受有效号码的格式化文本字段。
        JFormattedTextField phoneField = new JFormattedTextField(mask);
        phoneField.setPreferredSize(new Dimension(100, 20));

        //在这里,我们创建一个接受日期值的格式化文本字段。我们
        // 创建SimpleDateFormat的实例并使用它创建一个
        // DateFormatter实例,该实例将传递给JFormattedTextField。
        DateFormat format = new SimpleDateFormat("dd-MMMM-yyyy");
        DateFormatter df = new DateFormatter(format);
        JFormattedTextField dateField = new JFormattedTextField(df);
        dateField.setPreferredSize(new Dimension(100, 20));
        dateField.setValue(new Date());

        getContentPane().add(phoneField);
        getContentPane().add(dateField);
    }
}

这是可以在MaskFormatter类上使用的其他一些字符。

字符
描述
#数字
?字母
A数字或字母
*任意
L

对于字母,它将转换为等效的小写

U

对于字母,它将转换为等效的大写字母

H

对于十六进制值

转义另一个掩码字符