JOptionPane - überprüft Benutzereingaben und verhindert das Schließen, bis die Bedingungen erfüllt sind

8

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%     
bioMind 24.10.2012, 18:05
quelle

2 Antworten

21

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%     
David Kroukamp 24.10.2012, 18:26
quelle
0

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 }

%Vor%

Der Code zum Aufrufen lautet:

%Vor%     
PMorganCA 27.06.2013 20:02
quelle

Tags und Links