Java 如何创建像DateField这样的JtextField,在其中永久添加斜杠(/)
如何创建一个类似于Java 如何创建像DateField这样的JtextField,在其中永久添加斜杠(/),java,swing,Java,Swing,如何创建一个类似于DateField的JtextField,其中包含分隔月、日和年值的透明斜杠。与下面的示例类似,当字段为空时,斜杠是可见的,当用户键入值时,日期值将围绕斜杠。也就是说,如果用户在字段中键入031618,它将显示为03/16/18: 我在inernet上看到过这样的例子,所以我知道这是可能的,但我自己不知道如何使它工作。您需要使用JFormattedTextField,而不是JTextField,并使用类SimpleDataFormat,如下所示: SimpleDateForm
DateField
的JtextField
,其中包含分隔月、日和年值的透明斜杠。与下面的示例类似,当字段为空时,斜杠是可见的,当用户键入值时,日期值将围绕斜杠。也就是说,如果用户在字段中键入031618
,它将显示为03/16/18
:
我在inernet上看到过这样的例子,所以我知道这是可能的,但我自己不知道如何使它工作。您需要使用
JFormattedTextField
,而不是JTextField
,并使用类SimpleDataFormat
,如下所示:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
JFormattedTextField field = new JFormattedTextField(dateFormat);
- 您可以使用:
- 正如@camickr已经说过的,也请查看
您是在谈论Swing还是其他UI框架/技术?无论如何,为什么要使用JTextField作为日期?使用JFormattedTextField导入DatePickeru要好得多(而且可能更容易)。阅读Swing教程中关于的部分,了解更多信息和工作示例。在计费和记帐软件中,所有操作都应该使用键盘,因为在这些类型的软件中,操作速度应该很快。因此,我避免使用鼠标。这就是为什么我想通过此方法来完成此操作way@Stultuskebut如果我使用的是JFormatted字段,因此我无法使用退格和删除来删除“/”。我希望软件用户不能通过退格和删除来删除该字段。@camickrIs是否无法使用过时且麻烦的
SimpleDataFormat
类?那太糟糕了…
import java.awt.*;
import java.text.ParseException;
import javax.swing.*;
import javax.swing.text.MaskFormatter;
public final class MaskFormatterTest {
private Component makeUI() {
String mask = "##/##/##";
JFormattedTextField field = new JFormattedTextField(createFormatter(mask));
field.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
field.setText("031618");
JPanel p = new JPanel(new GridLayout(2, 1, 10, 10));
p.add(field);
p.add(new JTextField("03/16/18"));
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
panel.add(p, BorderLayout.NORTH);
return panel;
}
protected static MaskFormatter createFormatter(String s) {
MaskFormatter formatter = null;
try {
formatter = new MaskFormatter(s);
} catch (ParseException ex) {
System.err.println("formatter is bad: " + ex.getMessage());
}
return formatter;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new MaskFormatterTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}