Feldvalidierung swing

Diskutiere Feldvalidierung swing im AWT, Swing, JavaFX & SWT Bereich.
M

michipabst

Hallo,

ich möchte für ein kleines Projekt verschiedene JFormattedTextFields sofort bei der Eingabe validieren. Ziel ist dabei, die Eingabe von unerlaubten Zeichen sofort zu unterbinden und das Feld im Fehlerfall rot zu hinterlegen oder ein Label zu befüllen, das den Fehlertext ausgibt. Validiert werden sollen verschiedene Attribute, z.B. Länge der Eingabe, eingegebene Werte (z.B. nur Zeichen (z.B. "abcde123" zulässig, oder welche auch immer), Zahlen validieren (z.B. nur ganze Zahlen wie 1000, oder nur Dezimalzahlen mit vorgegebener Vor- und Nachkommastellenzahl wie z.B. 1,25). Außerdem soll das ganze auch bei Copy&Paste funktionieren.

Ich kenne diese Möglichkeiten, aber weiß nicht, was für meine Fälle der beste Weg ist:

- Maskformatter (kann die Feldlängenbeschränkung, ich kann erlaubte Zeichen eingeben, ABER: befüllt das Feld standardmäßig mit Leerzeichen vor was mich optisch in der GUI stört
Code:
try {
    MaskFormatter formatter = new MaskFormatter("***"); // Bis 3 Zeichen
    formatter.setValidCharacters("0123456789"); // Nur Zahlen
    formatter.install(txtInput1);
}
- DocumentListener mit AbstractFormatterFactory (damit kann ich gut Zahlen verarbeiten, aber Strings nicht so)
Code:
        textField1.setFormatterFactory(new AbstractFormatterFactory() {
            @Override
            public AbstractFormatter getFormatter(JFormattedTextField tf) {                
                NumberFormat format = DecimalFormat.getInstance();
                format.setMinimumFractionDigits(2);
                format.setMaximumFractionDigits(2);
                format.setRoundingMode(RoundingMode.HALF_UP);
                InternationalFormatter formatter = new InternationalFormatter(format);
                formatter.setAllowsInvalid(false);
                formatter.setMinimum(0.0);
                formatter.setMaximum(1000.00);
                return formatter;
            }
        });
- Actionhandler mit KeyPressed oder KeyReleased (wäre mein Favorit, aber ich kann die Eingabe eines unerlaubten Zeichens nicht verhindern, es wird dann zwar durch roten Hintergrund als falsch gekennzeichet, aber das Zeichen soll ja nicht eingegeben werden dürfen
Code:
    public void keyReleased(KeyEvent arg0) {
                
        Object objs = arg0.getSource();
        String strFeldwert = "0";
        
        // Setzen für txtFehltage
        if (objs == txtFehltage) {
            strFeldwert = txtFehltage.getText();
            FehltageBemerkung.setFehltage(strFeldwert);
        }
        // Setzen für txtUnentschuldigteTage
        if (objs == txtUnentschuldigteTage) {
            strFeldwert = txtUnentschuldigteTage.getText();
            FehltageBemerkung.setUEFehltage(strFeldwert);
        }        
        
        String text1 = txtFehltage.getText();
        String text2 = txtUnentschuldigteTage.getText();
        txtFehltage.setBackground(Color.WHITE);
        txtUnentschuldigteTage.setBackground(Color.WHITE);
        if (text1.length() > 0 && text2.length() > 0) {
            Integer int1 = Integer.parseInt(text1.replace(" ", ""));
            Integer int2 = Integer.parseInt(text2.replace(" ", ""));
            if (int2 > int1) {
                txtFehltage.setBackground(Color.RED);
                txtUnentschuldigteTage.setBackground(Color.RED);
            }
        }
Bin offen für und hoffe auf ein paar Ideen von euch.
Danke sagt der Michi
 
mihe7

mihe7

Grundsätzlich würde ich nur dann einen Eingabefehler anzeigen lassen, wenn der Feldinhalt auch tatsächlich ungültig ist. Sprich: Fehleingaben abzufangen und zusätzlich das Feld z. B. rot markieren, gibt keinen Sinn und verwirrt den Benutzer nur.

DocumentFilter und InputVerifier dürften geeignete Ansätze sein.
 
M

michipabst

Danke das hatte ich noch nicht auf dem Schirm. Wo liest du dich hierzu ein; bzw. wüsstest du ne Sourcebase wo ich bezüglich Verifiern fündig werden könnte?
 
Thema: 

Feldvalidierung swing

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben