6

我无法使用JTextField. 有没有办法JTextField有一个固定的日期格式?

4

6 回答 6

10

您可以将 JFormattedTextField 与SimpleDateFormat一起使用

DateFormat format = new SimpleDateFormat("your_format");
JFormattedTextField dateTextField = new JFormattedTextField(format);
于 2012-09-29T19:39:32.177 回答
3

你应该看看

对于初学者...

于 2012-09-29T19:38:50.830 回答
1

如果您使用的是 Swing,请将 JFormattedTextField 添加到您的 JFrame。在属性中,单击 formatterFactory。在对话框中,选择日期类别,然后选择格式。现在您的格式将被强制执行。

在此处输入图像描述

于 2015-03-22T20:18:43.727 回答
0

正如评论中所说,您可能更喜欢查看日期选择器组件而不是文本字段。日期选择器组件将使用户免于为日期语法而苦恼。

java.time

我建议您使用现代 Java 日期和时间 API java.time 进行日期工作。因此,对于喜欢使用文本字段作为日期的任何人,我做了一个小实验,将 a与java.timeJFormattedTextField中的类结合使用。LocalDate对于文本字段,我发现最好编写一个小子类,指定我们从日期字段中获得的对象类型是LocalDate

public class DateField extends JFormattedTextField {

    private static final long serialVersionUID = -4070878851012651987L;

    public DateField(DateTimeFormatter dateFormatter) {
        super(dateFormatter.toFormat(LocalDate::from));
        setPreferredSize(new Dimension(100, 26));
    }

    @Override
    public LocalDate getValue() {
        return (LocalDate) super.getValue();
    }

}

AJFormattedTextField接受java.text.Format用于格式化和解析值的对象。DateTimeFormatter从 java.time 有几个重载的toFormat方法给我们java.text.Format。甚至我们可以指定从Format.

要尝试此日期字段类:

public class TestFrame extends JFrame {

    public TestFrame() {
        super("Test");
        setLayout(new FlowLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
                .withLocale(Locale.forLanguageTag("es"));
        DateField dateField = new DateField(dateFormatter);
        add(dateField);
        dateField.setValue(LocalDate.now(ZoneId.systemDefault()));

        JButton okButton = new JButton("OK");
        okButton.addActionListener(ev -> JOptionPane.showMessageDialog(TestFrame.this,
                "Date entered is " + dateField.getValue()));
        add(okButton );

        pack();
    }

    public static void main(String[] args) {
        new TestFrame().setVisible(true);
    }

}

我指定西班牙语格式只是为了清楚地表明正在进行格式化和解析。您可以在此处指定用户喜欢的格式。例如DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)DateTimeFormatter.ofPattern("dd/MM/uu")。考虑使用短格式,因为大多数用户不喜欢输入过多的内容。

现在JFrame看起来像这样:

在此处输入图像描述

11 ago. 2020我输入并单击确定,而不是今天的日期:

在此处输入图像描述

关联

Oracle 教程:日期时间解释如何使用 java.time。

于 2020-04-26T18:59:17.843 回答
0

我在 Netbeans 中的解决方案是:从 JDateChooser 组件中选择日期,然后一个不可聚焦的 jtextfield 从 JDateChooser 中选择的日期获取日期:(1)为了制作固定日期格式,在 JDateChooser 的属性中,例如我们设置日期格式:yyyy-MM-dd;(2)make "jtextfield.setFocusable(false)",这是为了避免输入错误的日期格式或不需要的字符

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述 在此处输入图像描述

于 2019-09-30T14:05:28.080 回答
-2

我认为最好的方法是使用 JFormatedTextField。

我有这个代码试试这个:

package your_package;

import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class.....{

private String getdate(){
      DateFormat format = new SimpleDateFormat("MM/DD/YYYY"); //display your format.
      Date date = new Date();//puts the date in variable.
      return dateformat.format(date); //returns the format to the date variable.
}

public your_app{
     .....
     String date = new getdate();
     txtDate.setvalue(date);
}
}

希望这会给您一个想法并有所帮助... :)

于 2013-06-17T08:15:59.693 回答