Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建像DateField这样的JtextField,在其中永久添加斜杠(/)_Java_Swing - Fatal编程技术网

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);
    });
  }
}