после чтения this article и this question Я попытался сделать комбо из двух: JFormattedTextField, который всегда показывает косые черты в правильных положениях и автоматически анализирует объект Date.JFormattedTextField с MaskFormatter и DateFormat
код я придумал следующий:
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», и компонент сообщает мне, что это значение «ok», потому что я не знаете, где подключить SimpleDateFormat.
Мое последнее средство заключается в том, чтобы поместить MaskFormatter в конструктор JFormattedTextField, получить текст с помощью метода getText(), попытаться проанализировать дату с помощью DateFormat и в случае ошибки сделать что-то, но я думаю, что есть умный способ сделать это. Я попытался с помощью метода
textField_AScadenze.setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat("dd/MM/yyyy"))));
, но как только я ничего не вставить и нажмите вне косой черты исчезли. Пожалуйста, помогите. Спасибо