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:
ich hoffe, dass ich mein Problem verständlich geschildert habe und dass mir einer von euch weiter helfen kann
grüße
dark_game
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;
}
}
}
}
grüße
dark_game