European Article Number (EAN) in JFormattedTextfield

megamaxx

Mitglied
Hallo,

ich möchte in meinem Programm eine EAN in ein JFormattedTextfield schreiben. Ich habe vor die EAN (Barcode, Hier nachzulesen: European Article Number) mit einem Barcode-Scanner einzuscannen.

Dieser sollte mir dann eine 8 BZW. 13 stellige Ganzzahl in mein Textfeld schreiben. Wenn es der Scanner macht - Kein Problem.
Nun kann es aber auch vorkommen, dass die EAN per Hand eingeben werden muss. Ich möchte im Java-Code verhindern, dass zu viele od. zu wenig Stellen eingegeben werden.

Jetzt mein Problem: Ich weiß leider nicht, wie ich eben dieses "BZW." umsetzen kann.

Theoretisch wären zwei MaskFormatter ("########", "#############") DIE Lösung, nur leider geht das in Java nicht. Ich weiß zumindest nicht wie.. :bahnhof:

Hier mein bisheriger Ansatz:
Java:
InputEANVerifier tfeanVerifier = new InputEANVerifier();
            MaskFormatter mf = new MaskFormatter("#############");
            mf.setAllowsInvalid(false);
            tfean.setFormatterFactory(new DefaultFormatterFactory(mf));
            tfean.setInputVerifier(tfeanVerifier);

InputEANVerifier:
Java:
public class InputEANVerifier extends InputVerifier {

    @Override
    public boolean shouldYieldFocus(JComponent input) {

        boolean inputOK = verify(input);
        if (inputOK) {
            return true;
        } else {
            Toolkit.getDefaultToolkit().beep();
            JFormattedTextField tf = (JFormattedTextField) input;
            tf.setCaretPosition(0);
            return false;
        }
    }

    @Override
    public boolean verify(JComponent input) {
        JFormattedTextField tf = (JFormattedTextField) input;
        String ean;
        ean = tf.getText().toString();
        if (ean.length() == 8 || ean.length() == 13) {
            return true;
        } else {
            return false;
        }
    }
}

Vielleicht kennt ja einer von euch das Problem oder weiß eine Lösung.

Bin auf jeden Fall für jede Hilfe dankbar!
 
Zuletzt bearbeitet:

megamaxx

Mitglied
Das Problem mit Inputverifier ist, dass der eingegebene Wert erst überprüft wird, sobald der Focus verlassen wird. In erster Linie ist das gut!
Ich möchte aber auch, dass es gar nicht möglich ist Buchstaben oder andere Zeichen einzugeben, sondern nur Ziffern.
Geht das nur mit maskformatter (setAllowsInvalid(False))oder auch anders?
 

Oben