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:
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?
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":
InputVerifier
, das einfach vermeidet, den Fokus zu ändern Format
s enthält (für Daten, Doppel, ganze Zahlen, Bereiche, ...) und Sie können fast jede Situation Format
s, leicht einstellbar für verschiedene Locale
s JFormattedTextField
nicht analysieren. Der gesamte Parsing-Code ist im Format enthalten, und Sie können einfach JFormattedTextField#getValue
verwenden
JFormattedTextField
übernommen. Sie wissen, dass der mit getValue
abgerufene Wert ein gültiger Wert ist 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.
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.