将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 | 对于十六进制值 |
| ‘ | 转义另一个掩码字符 |