在阅读了这篇文章和这个问题之后,我尝试将两者结合起来:一个 JFormattedTextField,它始终在正确的位置显示斜线并自动解析一个 Date 对象。
我想出的代码如下:
private DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
textField_DaRiassuntoIncassi = new JFormattedTextField(df);
textField_ARiassuntoIncassi = new JFormattedTextField(df);
textField_DaScadenze = new JFormattedTextField(df);
textField_AScadenze = new JFormattedTextField(df);
textField_DaRiassuntoIncassi.setColumns(10);
textField_ARiassuntoIncassi .setColumns(10);
textField_DaScadenze .setColumns(10);
textField_AScadenze .setColumns(10);
try
{
MaskFormatter dateMask = new MaskFormatter("##/##/####");
dateMask.install(textField_DaRiassuntoIncassi);
dateMask.install(textField_ARiassuntoIncassi);
dateMask.install(textField_DaScadenze);
dateMask.install(textField_AScadenze);
}
catch(ParseException ex)
{
ex.printStackTrace();
}
问题是,当我单击文本字段输入值时,当我键入时,两个斜杠会在我键入时移动,而不是我希望它们保持固定(就像按下键盘上的“插入”键一样) . 如果我将 MaskFormatter 放在构造函数中,问题就消失了,但是我可以在文本字段中输入我想要的任何数字,例如“99/00/9874”并且组件告诉我这是一个好的值,因为我不知道在哪里插入 SimpleDateFormat。
我最后的手段是将 MaskFormatter 放在 JFormattedTextField 构造函数中,使用 getText() 方法获取文本,尝试使用 DateFormat 解析日期并在出现错误时执行某些操作,但我认为有一个聪明的方法可以做到这一点。我尝试使用该方法
textField_AScadenze.setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat("dd/MM/yyyy"))));
但只要我不插入任何东西并点击出来,斜线就消失了。请帮忙。谢谢