Kann mir jemand sagen, ob es einen bequemen Weg gibt zu verhindern, dass JOptionPane
mit einem Klick auf OK schließt, wenn die Bedingungen für Benutzereingabefelder nicht erfüllt sind?
Oder habe ich keine andere Wahl, als JFrame
zu verwenden?
Meine Validierungslogik bisher. Scheint nicht zu funktionieren, weil die Tasten aus irgendeinem Grund einmal anklickbar sind ...
%Vor% Sie können Ihre eigene benutzerdefinierte JDialog
erstellen, um Benutzereingaben usw. zu prüfen, bevor Sie schließen oder weitermachen. Siehe diesen Link:
Automatisches Schließen des Dialogs beenden
Wenn der Benutzer auf eine von JOptionPane erstellte Schaltfläche klickt, wird standardmäßig der Der Dialog wird geschlossen. Aber was, wenn Sie die Antwort des Benutzers vorher überprüfen möchten den Dialog schließen? In diesem Fall müssen Sie Ihre eigene Property implementieren Ändern Sie den Listener so, dass der Dialog, wenn der Benutzer auf eine Schaltfläche klickt nicht automatisch geschlossen.
Hier ist ein Beispiel, das ich gemacht habe:
Wenn Sie falsch / keinen Text eingeben und auf Enter klicken, wird eine Bestätigungsmeldung angezeigt:
Wenn Sie auf X klicken, um Dialog zu schließen, oder auf Abbrechen klicken, wird eine Bestätigungsmeldung ebenfalls angezeigt:
Wenn korrekter Text eingegeben wird (in diesem Fall "David") und die Eingabetaste gedrückt wird, wird eine Nachricht angezeigt und JDialog
wird beendet:
CustomDialog.java:
%Vor%Eine Sache über Automatisches Schließen des Dialogs beenden ist, dass es nur hilft Wenn Sie das Schließen oder Validieren verhindern und dann schließen möchten, indem Sie eine Lösung auf den Beispielcode in diesem Lernprogramm anwenden, konnte ich nicht überprüfen, ob die Lösung validiert wurde und offen bleiben, wenn die Validierung fehlgeschlagen ist.
Im Nachhinein glaube ich, dass der Grund, warum mein erster Versuch nicht funktioniert hat, darin liegt, dass er JOptionPanel.createDialog () verwendet hat (nicht was der Beispielcode getan hat). Vielleicht lassen Sie das JOptionPanel einen eigenen JDialog erstellen und richten Sie einige "Hintergrund" -Abhängigkeiten ein, wie die Ereignisverarbeitung funktioniert hat ... meh. Auf jeden Fall habe ich jetzt, was ich wollte: David Kroucamps Code war sehr nützlich für mich.
Ich posten meine Lösung, weil es PropertyChangeEvents anders als David behandelt, also könnte es für einige Leute nützlich sein. Du wirst sehen, dass ein großer Teil des Codes identisch mit seinem ist (danke David)
Diese Klasse prüft auf Existenz der Datei und lässt den Benutzer einen neuen Namen angeben oder abbrechen. Es braucht einige Argumente im Konstruktor, um die Eingaben der Benutzer zu überprüfen. Die Validierung ist
if(!Files.exists(rootPathArg.resolve(input))) { // close the dialog }
Der Code zum Aufrufen lautet:
%Vor%Tags und Links java swing joptionpane