Uhrzeit mit dem PlainDocument prüfen

dark_game

Grünschnabel
Hallo zusammen,

Folgendes:

ich habe eine JComboBox mit den werten 00:00 bis 23:45 in 15er Minuten Schritten. Nun will ich die Eingaben in dieser ComboBox mit einem PlainDocument prüfen.

Das Problem ist jetzt, dass wenn der Benutzer eine Zahlenfolge ohne Doppelpunkt eingibt -> 1234

,soll nach der Eingabe der vierten Zahl ein Doppelpunkt zwischen der 2ten und 3ten Position eingefügt werden. -> 12:34

Das klappt im wesentlichen aber, wenn ich den modifizierten String in der ComboBox anzeigen will erscheint folgende Ausgabe:

12:354 -> da erst nach dem fünften Druck einer Taste der Text ersetzt wird.

hier der Code:

Code:
protected class TimeVerifyDocument extends PlainDocument {

            /**
             * 
             */
            private static final long serialVersionUID = 7855614923899168243L;
            
            //erlaubte Eingabezeichen
            private static final String isValid = ":0123456789";
            //Variable für die Fehlerbehandlung
            private int error = 0;
            
            /**
             * @see javax.swing.text.PlainDocument#insertString(int,
             *      java.lang.String, javax.swing.text.AttributeSet)
             */
            @Override
            public void insertString(int offs, String str, AttributeSet a)
                    throws BadLocationException {
                
                String tmp = editor.getText().toString();
                String teilstring1;
                String teilstring2;
                
                for (int i = 0; i < str.length(); i++) {
                    
                    if (str == null)
                        return;
                    
                    //überprüft, ob gültige Zeichen eingegeben werden
                    //und die laenge der Eingabe
                    else if (isValid.indexOf(str.charAt(i)) == -1
                            || editor.getText().length() > 4) {

                        error = 1;
                    }
                    
                    //Wenn kein Doppelpunkt vorhanden ist, soll ein :
                    //eingefügt werden. Format: ##:## 
                    else if (editor.getText().indexOf(":", 1) == -1){
                        
                        try {
                            
                            teilstring1 = tmp.substring(0, 2);
                            teilstring2 = tmp.substring(2, 4);
                            
                            tmp = teilstring1 + ":" + teilstring2;
                            
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                        System.out.println(tmp);
                        editor.setText(tmp);
                        
                    }
                }

                //Fehlerüberprüfung
                switch (error) {
                 //keine Falsche Eingabe 
                 case 0:
                    editor.setBackground(java.awt.Color.WHITE);
                    super.insertString(offs, str, a);
                    break;
                  //falsche Eingabe
                  case 1:
                    editor.setBackground(java.awt.Color.RED);
                    super.insertString(offs, str, a);
                    break;
                }
            }
        }
    }
ich hoffe, dass ich mein Problem verständlich geschildert habe und dass mir einer von euch weiter helfen kann

grüße

dark_game
 
Zurück