Java Swing: Implementieren einer Gültigkeitsprüfung von Eingabewerten

8

In meiner Swing-Anwendung muss der Benutzer Zahlen und Werte eingeben, bevor er zum nächsten Fenster wechselt. Jetzt, wie ein sauberes Programm sollte, überprüfe ich jede Eingabe, ob sie gültig ist oder nicht, und wenn nicht, wird eine Fehlermeldung angezeigt und das nächste Fenster wird nicht geöffnet.

Die Struktur dieser Überprüfung ist wie folgt (Beispiel):

%Vor%

(*) Hinweis: Ich weiß, dass das Prinzip mehrerer JFrames hässlich ist, und ich bin dabei, das zu ändern, aber für diese Frage ist es irrelevant.

Nun liegt der Schwerpunkt dieser Frage in checkValidity() , die ich folgendermaßen strukturiert habe:

%Vor%

Das funktioniert genau so, wie ich es möchte, aber der Code selbst ist sehr hässlich, weil die Methode mit mehreren Eingabeoptionen 200, 300 oder mehr Zeilen lang ist (da ich nicht nur überprüfe, ob es zB eine Zahl ist, sondern auch Nummer macht im Kontext der Programmlogik Sinn und so weiter). Gibt es eine Swing-Methode, um solche Dinge zu überprüfen? Oder hat jemand eine bessere Idee, wie man genau diese Funktionalität mit Split-Methoden realisieren kann?

    
Valentino Ru 21.10.2012, 12:19
quelle

4 Antworten

16

Eine Lösung wäre Swings InputVerifier , um die Eingabe für jedes JTextField zu validieren. Da die Validierungsfunktion für jedes Feld gleich ist, kann für alle Komponenten eine einzige Instanz verwendet werden:

%Vor%     
Reimeus 21.10.2012, 12:34
quelle
7

Ich bevorzuge eine verbesserte Version von JFormattedTextField . Mit "Verbessert" bezeichne ich ein besseres Caret-Verhalten, Validierung bei jeder Änderung, um eine sofortige Benutzerrückmeldung zu liefern (z. B. Hintergrundfarbe ändern, wenn die Eingabe ungültig ist), .... Dies kombiniert mit einer Schaltfläche, die deaktiviert ist, bis die Eingabe gültig ist.

Hauptvorteile gegenüber dem "Klicken Sie auf den Button und sehen Fehlermeldungen erscheinen":

  • sofortiges Feedback für den Benutzer. Wenn Web-Anwendungen einen Hin- und Rückweg zum Server vermeiden und Javascript für sofortiges Feedback verwenden können, gibt es keine Entschuldigung dafür, dies in einer Desktop-Anwendung nicht zu haben. Drücken Sie eine Taste zum Bestätigen ist so '90.
  • visuelles Feedback ist wichtig und besser als das InputVerifier , das einfach vermeidet, den Fokus zu ändern
  • hoch wiederverwendbare Komponente. Stellen Sie nur sicher, dass Ihr 'Dienstprogramm-Paket' eine Menge Format s enthält (für Daten, Doppel, ganze Zahlen, Bereiche, ...) und Sie können fast jede Situation
  • behandeln
  • wegen der Verwendung von Format s, leicht einstellbar für verschiedene Locale s
  • Sie müssen die Eingabe nach dem JFormattedTextField nicht analysieren. Der gesamte Parsing-Code ist im Format enthalten, und Sie können einfach JFormattedTextField#getValue verwenden
  • Die Validierung wird von JFormattedTextField übernommen. Sie wissen, dass der mit getValue abgerufene Wert ein gültiger Wert ist
Robin 21.10.2012 15:35
quelle
3

Es gibt viele Dinge, die Sie tun können. Eine einfache Möglichkeit besteht darin, eine Methode zu verwenden, die eine Liste von Zeichenfolgen für die Syntaxanalyse in int prüft. Für zusätzliche Überprüfungen würden Sie mehr Methoden haben, die einige typische Dinge überprüfen, wie den Nummernbereich. Also teilen Sie jede Art von Prüfung in eine eigene Methode und komponieren sie nach Bedarf.

Ansonsten gibt es vollständige Validierungs-Frameworks, die solche Dinge handhaben. Sie sind leicht zu googeln, würde ich sagen.

    
Marko Topolnik 21.10.2012 12:33
quelle
2

Sie können eine Echtzeitvalidierung durch Verwendung einer DocumentFilter erhalten.

Sie überprüfen this und dies für einige Beispiele.

Ich denke jedoch, dass Sie in diesem Fall vielleicht die JFormattedTextField geeignetere Lösung finden.

    
MadProgrammer 21.10.2012 19:57
quelle

Tags und Links