Fehlerhandling

Status
Nicht offen für weitere Antworten.

jupp61

Mitglied
Hallo,
woran liegt das, die Fehlermeldung erscheint immer 3mal.

Code:
    private void antwortQuoteFocusLost(java.awt.event.FocusEvent evt) {                                       
// Prüfung der Eingabe
        try{
            minQuote = minQuote.parseInt(antwortQuote.getText());
        }catch (NumberFormatException e){
            JOptionPane.showMessageDialog(this, "Antwortquote nicht numerisch!", "Eingabefehler", JOptionPane.INFORMATION_MESSAGE);
            JFrameSondervereinbarungen.setVisible(true);
            antwortQuote.requestFocusInWindow(); 
        };
        if ((minQuote <= 0) | (minQuote > 100)){
            JOptionPane.showMessageDialog(this, "Antwortquote außerhalb gültigem Bereich!", "Eingabefehler", JOptionPane.INFORMATION_MESSAGE);
            JFrameSondervereinbarungen.setVisible(true);
            antwortQuote.requestFocusInWindow(); 
        };
    }

Danke
Jupp
 

André Uhres

Top Contributor
Zeile 5 muss so sein:
Code:
minQuote = Integer.parseInt(antwortQuote.getText());
Dies:
Code:
antwortQuote.requestFocusInWindow();
muss weg (an beiden Stellen: Zeile 9 und 14)

Die ; in den Zeilen 10 und 15 sind zwar aber überflüssig, aber nicht die Ursache des Problems.
 

jupp61

Mitglied
Hallo,
Danke für Erklärung.

Die mehrfachen Fehlermeldungen bekommt man so tatsächlich weg.

Aber durch Streichung von
Code:
antwortQuote.requestFocusInWindow();

wird dann auch das Feld verlassen, wobei der falsche Wert erhalten bleibt.

Was kann man da machen?

Muss die Prüfung an anderer Stelle erfolgen?


Danke
Jupp
 

André Uhres

Top Contributor
Das AntwortquoteDocument überwacht die antwortQuote während der Eingabe.
Es werden nur fehlerfreie Werte in das Textfeld eingefügt.
Beim Verlassen des Textfelds ist man somit sicher, dass es einen gültigen Wert enthält.
Daher braucht man keine zusätzliche Kontrolle bei focusLost oder wo auch immer:
Code:
...
    private JTextField antwortQuote;
    private int minQuote;
...
        minQuote = 1;
        antwortQuote = new JTextField(new AntwortquoteDocument(), String.valueOf(minQuote), 3);
        antwortQuote.selectAll();
...
    class AntwortquoteDocument extends PlainDocument {
        @Override
        public void insertString(final int offs, final String str, final AttributeSet a)
                throws BadLocationException {
            if(!str.matches("\\d+")){
                Toolkit.getDefaultToolkit().beep();
                return;
            }
            int i = Integer.parseInt(getText(0, offs) + str + getText(offs, getLength()-offs));
            if (i < 1 || i > 100) {
                Toolkit.getDefaultToolkit().beep();
                return;
            }
            minQuote = i;
            super.insertString(offs, str, a);
        }
        @Override
        protected void removeUpdate(final DefaultDocumentEvent chng) {
            super.removeUpdate(chng);
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    if (antwortQuote.getText().matches("0*")) {
                        minQuote = 1;
                        antwortQuote.setText(String.valueOf(minQuote));
                        antwortQuote.selectAll();
                    }
                }
            });
        }
    }
...
 

jupp61

Mitglied
Hallo,
Danke für Angebot.

Ich bin leider nicht so überzeugt. Ein Beep ist mir eigentlich zu wenig. In diesem Bsp. wäre das ja vielleicht ausreichend. Aber die Lösung kann es doch nicht sein. Es gibt doch auch sonst komplexere Prüfungen auf Eingabefelder, bei denen man nicht nur mit Beep sagt: "war nichts". Die Steuerung mit Dialogbox muss doch möglich sein.

Sorry wenn ich so anspruchsvoll bin

Jupp
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben