4 import java
.text
.DateFormat
;
5 import java
.text
.ParseException
;
6 import java
.text
.SimpleDateFormat
;
8 import java
.util
.Locale
;
10 import javax
.swing
.BorderFactory
;
11 import javax
.swing
.InputVerifier
;
12 import javax
.swing
.JComponent
;
13 import javax
.swing
.JFormattedTextField
;
14 import javax
.swing
.JOptionPane
;
15 import javax
.swing
.JTextField
;
16 import javax
.swing
.SwingUtilities
;
17 import javax
.swing
.UIManager
;
18 import javax
.swing
.border
.Border
;
23 public class DateInputVerifier
extends InputVerifier
{
24 JFormattedTextField input
;
25 public DateInputVerifier(JFormattedTextField tf
){
28 public boolean verify (final JComponent input
) {
29 ////System.out.println("Input getText = "+((JRtaTextField)input).getText());
30 ////System.out.println("L�nge des Inputs = "+((JRtaTextField)input).getText().length());
31 return this.isAlowedDate((JFormattedTextField
)input
);
35 private Character placeholder
= null;
37 * Set an Empty Character for delete the Input. If Empty Character is null,
38 * a valid value need to input.
41 public void setPlaceholder (final Character c
) {
46 * Return the char for delete the input or null if delete not allowed.
49 public Character
getPlaceHolder () {
50 return this.placeholder
;
53 protected boolean isAlowedDate (final JFormattedTextField input
) {
54 if(input
.getText().equals(" . . ")){
57 String inhalt
= input
.getText();
58 ////System.out.println("In verify / input = "+input.getText());
59 final DateFormat sdf
= this.getDateFormat ();
61 String teil
= inhalt
.substring(6).trim();
63 input
.setText(" . . ");
66 if(teil
.length() == 2){
67 String jahrtausend
= "";
68 if(IntegerTools
.trailNullAndRetInt(teil
) > 20){
69 jahrtausend
= inhalt
.substring(0,6).trim()+"19"+teil
;
71 jahrtausend
= inhalt
.substring(0,6).trim()+"20"+teil
;
73 input
.setText(jahrtausend
);
74 ////System.out.println("Datum = "+jahrtausend);
76 if(inhalt
.length() >= 8){
77 ////System.out.println("L�nge des Strings = "+input.getText().length());
78 if(inhalt
.substring(6,7).equals("0")){
79 String korrekt
= inhalt
.substring(0,6);
80 korrekt
= korrekt
+"20"+inhalt
.substring(6,8);
81 input
.setText(korrekt
);
82 ////System.out.println("korrigiertes Datum = "+korrekt);
85 final Date d
= sdf
.parse (input
.getText());
86 SwingUtilities
.invokeLater(new Runnable () {
88 input
.setText(sdf
.format(d
));
93 catch (final ParseException notValidOrDelete
) {
98 if (((DateInputVerifier) input).getPlaceHolder() != null) {
99 String noMaskValue = null;
100 if (Locale.getDefault ().getLanguage ().equals (Locale.GERMANY.getLanguage ())) {
101 ////System.out.println("InputVerifier - Locale = Germany");
102 noMaskValue = input.getText().replace ('.',((JFormattedField) input).getPlaceHolder ());
105 noMaskValue = input.getText().replace ('-',((JRtaTextField) input).getPlaceHolder ());
106 ////System.out.println("InputVerifier - Locale = English");
108 for (char c : noMaskValue.toCharArray()) {
109 if (c != ((JRtaTextField) input).getPlaceHolder()) return false;
114 //System.out.println("Unzul�ssige Datumseingabe");
115 JOptionPane
.showMessageDialog(null,"Unzulässige Datumseingabe");
122 protected DateFormat
getDateFormat () {
123 if (Locale
.getDefault().getLanguage().equals(Locale
.GERMANY
.getLanguage())) {
124 return new SimpleDateFormat ("dd.MM.yyyy");
127 return new SimpleDateFormat("yyyy-MM-dd");
131 public boolean shouldYieldFocus (final JComponent input
) {
132 if (!verify(input
)) {
133 input
.setForeground(Color
.RED
);
134 input
.setBorder(BorderFactory
.createEtchedBorder(Color
.RED
, new Color (255,50,50)));
138 //input.setForeground(Color.BLACK);
139 input
.setBorder((Border
)UIManager
.getLookAndFeelDefaults().get("TextField.border"));