Hallo,
ich möchte die Eingabe eine einem JTextField auf Plausibilität nach einem Bestimmten Muster prüfen, d.h. das 2. Zeichen muss ein "B" und die Eingabe muss eine bestimmte Länge haben. Ich habe dazu die Dokumentenklasse PlainDocument mit der Klasse PruefeChargeEingabeDokument überschrieben in der ich jede Eingabe mit dem Muster "_B______________" vergleiche.
Das Muster könnte später über ein Property File ausserhalb des Codes konfiguriert werden.
PruefeChargeEingabeDokument
Instanzierung des jTextFields
Meine Implementierung funktioniert grundsätzlich wie sie soll, d.h. sobald ich als 2. Zeichen ein Zeichen <> "B" eingebe erscheint der Messageialog und das JTextField wird geleert.
Jetzt habe ich aber folgendes Problem.
Wir erfassen die Eingabe über einen Barcodescanner, der am Ende ein <CR> um über den ActionListener des jTextfields in des nächste Textfield zu springen.
D.H. das <CR> des Barcodescanner schliesst direkt den MessageDialog, nachdem er kurz aufgeflackert ist.
hat jemand eine Lösung für das Problem, oder bleibt mir nicht anderes übrig mir eine eigene Klasse für die Prüfung zu schreiben und diese im ActionListener des JTextfields auftzrufen, nachdem die Eingabe komplett erfasst ist?
Mir gefiel diese Vorgehensweise ganz gut, weil hier die Prüfung vor der eigentlichen Verarbeitung durchgeführt wird.
Gruss
Ralf
ich möchte die Eingabe eine einem JTextField auf Plausibilität nach einem Bestimmten Muster prüfen, d.h. das 2. Zeichen muss ein "B" und die Eingabe muss eine bestimmte Länge haben. Ich habe dazu die Dokumentenklasse PlainDocument mit der Klasse PruefeChargeEingabeDokument überschrieben in der ich jede Eingabe mit dem Muster "_B______________" vergleiche.
Das Muster könnte später über ein Property File ausserhalb des Codes konfiguriert werden.
PruefeChargeEingabeDokument
Java:
public class PruefeChargeEingabeDokument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
String muster ="_B______________";
super.insertString(offs, str, a);
if (super.getLength() > muster.length()) {
JOptionPane.showMessageDialog(null,"Bitte geben Sie eine gültige Chargennnummer ein! Die Eingabe ist zu lang!", "Fehler", JOptionPane.WARNING_MESSAGE);
super.remove(0, super.getLength());
} else
if ( str.charAt(0) != muster.charAt(super.getLength()-1) && muster.charAt(super.getLength()-1) != '_' ){
JOptionPane.showMessageDialog(null,"Bitte geben Sie eine gültige Chargennnummer ein!", "Fehler", JOptionPane.YES_NO_CANCEL_OPTION);
super.remove(0, super.getLength());
}
}
}
Instanzierung des jTextFields
Java:
jTextFieldCharge = new javax.swing.JTextField();
jTextFieldCharge.setDocument(new PruefeChargeEingabeDokument());
Meine Implementierung funktioniert grundsätzlich wie sie soll, d.h. sobald ich als 2. Zeichen ein Zeichen <> "B" eingebe erscheint der Messageialog und das JTextField wird geleert.
Jetzt habe ich aber folgendes Problem.
Wir erfassen die Eingabe über einen Barcodescanner, der am Ende ein <CR> um über den ActionListener des jTextfields in des nächste Textfield zu springen.
D.H. das <CR> des Barcodescanner schliesst direkt den MessageDialog, nachdem er kurz aufgeflackert ist.
hat jemand eine Lösung für das Problem, oder bleibt mir nicht anderes übrig mir eine eigene Klasse für die Prüfung zu schreiben und diese im ActionListener des JTextfields auftzrufen, nachdem die Eingabe komplett erfasst ist?
Mir gefiel diese Vorgehensweise ganz gut, weil hier die Prüfung vor der eigentlichen Verarbeitung durchgeführt wird.
Gruss
Ralf