Ik heb problemen met het implementeren van een JFormattedTextField voor het invoeren van een datum.
Bij de creatie wijs ik een new DefaultFormatterFactory toe, omdat ik dan dadelijk de formatters voor het JFormattedTextField kan toewijzen.
Eerst probeerde ik alleen met een DateFormatter(new SimpleDateFormat("dd/MM/yyyy")). Maar dan moest de input van het JFTextField EXACT dat format hebben.
Om het de users wat gemakkelijker te maken dacht ik een MaskFormatter("##/##/####") te gebruiken als editFormat van de DefaultFormatterFactory om dat dan de / als literal characters niet editable zijn.
Nu is het probleem dat de MaskFormatter een String retourneert en format-methode van SimpleDateFormat een Date of een Long verwacht. En dus altijd een IllegalArgumentException geeft.
Nu heeft SimpleDateFormat een parse-methode die wél een String aanneemt. Maar ik geraak er dus niet uit hoe ik die parse-methode kan aanspreken voor de format-methode word aangesproken.
Ik ben me er al een paar dagen op aan het blindstaren en de oplossing is waarschijnlijk voor de hand liggend. Maar ik kom er niet uit...
Iemand een idee?
Bij de creatie wijs ik een new DefaultFormatterFactory toe, omdat ik dan dadelijk de formatters voor het JFormattedTextField kan toewijzen.
Eerst probeerde ik alleen met een DateFormatter(new SimpleDateFormat("dd/MM/yyyy")). Maar dan moest de input van het JFTextField EXACT dat format hebben.
Om het de users wat gemakkelijker te maken dacht ik een MaskFormatter("##/##/####") te gebruiken als editFormat van de DefaultFormatterFactory om dat dan de / als literal characters niet editable zijn.
Nu is het probleem dat de MaskFormatter een String retourneert en format-methode van SimpleDateFormat een Date of een Long verwacht. En dus altijd een IllegalArgumentException geeft.
Nu heeft SimpleDateFormat een parse-methode die wél een String aanneemt. Maar ik geraak er dus niet uit hoe ik die parse-methode kan aanspreken voor de format-methode word aangesproken.
Ik ben me er al een paar dagen op aan het blindstaren en de oplossing is waarschijnlijk voor de hand liggend. Maar ik kom er niet uit...
Iemand een idee?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| DateFormatter dateFormatDate = null; MaskFormatter dateFormatterMask = null; try { dateFormatDate = new DateFormatter(new SimpleDateFormat("dd/MM/yyyy")); dateFormatterMask = new MaskFormatter("##/##/####"); dateFormatterMask.setPlaceholder("__/__/____"); dateFormatterMask.setPlaceholderCharacter('_'); } catch (ParseException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } TF_date = new JFormattedTextField(new DefaultFormatterFactory(dateFormatterMask, dateFormatDate, dateFormatterMask, dateFormatterMask)); |