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:
InputEANVerifier:
Vielleicht kennt ja einer von euch das Problem oder weiß eine Lösung.
Bin auf jeden Fall für jede Hilfe dankbar!
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: