Java 如何使jtextfield具有固定的日期格式?
使用Java 如何使jtextfield具有固定的日期格式?,java,swing,date,jtextfield,Java,Swing,Date,Jtextfield,使用JTextField创建固定日期格式时遇到问题。有没有办法让JTextField具有固定的日期格式?您应该看看 (带and) (in) 对于初学者…您可以将JFormattedTextField与 我认为最好使用jFormattedTextField 我有以下代码,请尝试以下代码: package your_package; import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFo
JTextField
创建固定日期格式时遇到问题。有没有办法让JTextField具有固定的日期格式?您应该看看
- (带and)
- (in)
对于初学者…您可以将JFormattedTextField与
我认为最好使用jFormattedTextField 我有以下代码,请尝试以下代码:
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);
}
}
希望这能给你一个想法并帮助你……:) 如果使用Swing,请在JFrame中添加JFormattedTextField。在属性中,单击formatterFactory。在对话框中,选择日期类别,然后选择格式。现在将强制执行您的格式
我在Netbeans中的解决方案是:从JDateChooser组件中选择日期,然后一个不可聚焦的jtextfield从JDateChooser中选择的日期获取日期: (1) 为了制作固定日期格式,我们在JDateChooser的属性中设置了日期格式:yyyy-MM-dd; (2) 使“jtextfield.setFocusable(false)”,这是为了避免输入错误的日期格式或不需要的字符
正如评论中所说,您可能更喜欢查看日期选择器组件,而不是文本字段。日期选择器组件将使用户从日期语法中解脱出来 java.time 我建议您使用java.time(现代java日期和时间API)进行日期工作。因此,对于喜欢使用文本字段作为日期的人,我做了一个小实验,将
JFormattedTextField
与java.time中的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();
}
}
JFormattedTextField
接受用于格式化和解析值的java.text.Format
对象<来自java.time的code>DateTimeFormatter有几个重载的toFormat
方法,它们为我们提供了java.text.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);
}
}
我指定西班牙语格式只是为了清楚地证明正在进行格式化和解析。在这里,您可以指定用户喜欢的格式。例如,CalizedDate(FormatStyle.SHORT)的DateTimeFormatter.
或模式(“dd/MM/uu”)的DateTimeFormatter.
。考虑到短格式,因为大多数用户不喜欢键入超过必要的。
现在出现的JFrame
如下所示:
而不是我11年前输入的今天的日期。2020并单击确定:
链接
解释如何使用java.time。看看。或者使用更现代的UI组件,如well。。。您的答案存在一些问题:代码片段a)与您的描述不相关b)它不会编译(即使将点视为完整的代码:-)c)不符合java命名约定d)逻辑颠倒(假设txtData是formattedTextField)e)与其他答案相比没有什么新的。。。
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);
}
}