J'ai une classe FilePathdialog qui prolonge JDialog et que la classe est appelée à partir de certains classes X. Voici une méthode de classe X
projectDialog = new FilePathDialog(); projectDialog.setVisible(true); projectDialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Window closing"); try { doWork(); } catch (Throwable t) { t.printStackTrace(); } } public void windowClosed(WindowEvent e) { System.out.println("Window closed"); try { doWork(); } catch (Throwable t) { t.printStackTrace(); } } });
3 Réponses :
Encore une fois, la clé est Si c'est modal, il n'y a pas besoin d'un WindowListener, car vous saurez que la boîte de dialogue a été traitée puisque le code reprendra immédiatement sous votre appel à votre appel à Si, d'autre part, il est moins en mode, une liste de fenêtres doit fonctionner, et vous avez probablement eu un autre problème dans le code non montré ici. , et vous voudrez poster un SSCCE pour que nous analyses, exécuter et modifier. P> Modifier pour GPECHE strong> SETVisible (true) code> sur la boîte de dialogue. c'est-à-dire que cela devrait fonctionner: p>
Veuillez consulter ce SSCCE indiquant que les 3 types de paramètres de fermeture par défaut déclencheront l'écoute de la fenêtre: P>
Javadoc pour windowlistener.windowflosed () code>
: p>
invoqué lorsqu'une fenêtre a été fermée à la suite de l'appelant et pour Définit l'opération qui se passera par défaut lorsque l'utilisateur initie une "fermeture" sur cette boîte de dialogue. Les choix possibles sont: p>
La valeur est définie sur hide_on_close par défaut. p>
qui suggère que vous devriez appeler JDialog.setDefaultCloseopération () Code>
: P>
projectdialog.setdefaultcloseoperation (windowConstants.dispose_on_close); code> après instanciation
filepathdialog code>. p>
Tous les types de fermeture par défaut répertoriés ci-dessus déclencheront des méthodes de clause de fenêtres ou d'une fenêtre ou à la fois dans le WindowListener. S'il vous plaît voir ma réponse pour un SSCCE qui démontre que c'est le cas.
@ Hovercraft plein d'anguilles Oh oui, je n'ai pas vu l'appel à Dowork () Code> Intérieur
WindowsClose () Code>
Réponse à votre question P>
Ajouter WindowListener à votre jdialog ( jdialog.do_nothing_on_close ), sur windowclose événement pour essayer d'exécuter votre code, Si se termine par le succès, appelez Je n'ai pas accepté votre idée, une autre solution de contournement p>
Créer un seul jetez () code> ou
SETVisible (FALSE) CODE> P>
jdialog (jdialog.do_nothing_on_close) code> avec
windowlistener code> et réutiliser cela pour un autre
action code>, l'action finale sera toujours
SETVISIBLE (FALSE) CODE>, si votre code se termine par le succès, supprimez ensuite le (s) enfant (s) de
JDialog code>, votre
JDialog code> est préparé pour un autre travail p>
Avez-vous essayé d'ajouter l'auditeur avant de rendre la fenêtre visible?
Est-ce une boîte de dialogue modale? Si oui, vous n'ajoutez pas d'auditeur de fenêtre, surtout après que la boîte de dialogue est rendue visible. Au lieu de cela, la boîte de dialogue a été traitée lorsque la ligne après
projectdialog.setVisible (true); code> est atteint.
Cela ne devrait pas avoir d'importance. Si une boîte de dialogue modale (ce qui vous convient), le code reprendra juste après l'utilisateur (vrai), il n'y aurait donc pas besoin d'un auditeur. Si une boîte de dialogue non modale, l'auditeur fonctionnera, peu importe quand il est ajouté.