我无法使用JTextField
. 有没有办法JTextField
有一个固定的日期格式?
6 回答
您可以将 JFormattedTextField 与SimpleDateFormat一起使用
DateFormat format = new SimpleDateFormat("your_format");
JFormattedTextField dateTextField = new JFormattedTextField(format);
如果您使用的是 Swing,请将 JFormattedTextField 添加到您的 JFrame。在属性中,单击 formatterFactory。在对话框中,选择日期类别,然后选择格式。现在您的格式将被强制执行。
正如评论中所说,您可能更喜欢查看日期选择器组件而不是文本字段。日期选择器组件将使用户免于为日期语法而苦恼。
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。
我认为最好的方法是使用 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);
}
}
希望这会给您一个想法并有所帮助... :)