272 votes

Comment faire pour fermer par programmation une JFrame

Quelle est la bonne façon d'obtenir une JFrame de près, le même que si l'utilisateur avait frappé le bouton [x], ou les touches Alt+F4 (sur windows)?

J'ai par défaut de mon opération de fermeture de définir la façon dont je le veux, via

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

et c'est exactement ce que je veux, avec les mêmes contrôles. Cette question n'est pas de cela.

Ce que je veux vraiment faire est de provoquer la gui se comporter de la même façon que vous appuyez sur [x] serait la cause de se comporter.

I. e., à supposer que je de prolonger WindowAdaptor, puis ajouter une instance de mon adaptateur en tant qu'auditeur via addWindowListener(); j'aimerais voir la même séquence d'appels par le biais de windowDeactivated() windowClosing() windowClosed() comme ce serait le cas avec l' [x]. Pas tellement déchirer la fenêtre comme pour lui dire de se déchirer elle-même, pour ainsi dire.

354voto

camickr Points 137095

Si vous souhaitez que le GUI se comporter comme si vous avez cliqué sur le « X » puis vous devez expédier un windowClosing, événement à la fenêtre. La « ExitAction » de Fermeture d’une Application vous permet d’ajouter cette fonctionnalité à un élément de menu ou de n’importe quel composant qui utilise les Actions facilement.

142voto

Alex Points 2858
<pre><code></code><p>Pas trop compliqué.</p></pre>

27voto

James Schek Points 11070

Si par Alt-F4 ou X-vous dire par "Quitter l'Application Immédiatement, Sans tenir compte des Autres Fenêtres ou des discussions sont en cours", puis System.exit(...) permettra de faire exactement ce que vous voulez dans un très abrupte, force brute, et éventuellement problématiques de la mode.

Si par Alt-F4 ou X-vous dire de masquer la fenêtre, puis frame.setVisible(false) est de savoir comment vous "fermer" de la fenêtre. La fenêtre va continuer à consommer les ressources de la mémoire, mais peut être à nouveau visible très rapidement.

Si par Alt-F4 ou X-vous dire de masquer la fenêtre et de disposer de toutes les ressources qu'elle consomme, puis frame.dispose() est de savoir comment vous "fermer" de la fenêtre. Si le cadre a été le dernier visible de la fenêtre et il n'y a pas d'autres non-démon de threads en cours d'exécution, le programme va fermer. Si vous montrez de nouveau la fenêtre, il aura pour réinitialiser toutes les ressources natives de nouveau (graphique tampon, poignées de fenêtre, etc).

dispose() pourrait être plus proche du comportement que vous voulez vraiment. Si votre application dispose de plusieurs fenêtres sont ouvertes, voulez-vous Alt-F4 ou X pour quitter l'application ou tout simplement fermer la fenêtre active?

La Java Swing Tutoriel sur la Fenêtre Auditeurs peuvent aider à clarifier les choses pour vous.

15voto

Gazi Alankus Points 447

Si vous avez fait cela pour s’assurer que l’utilisateur ne peut pas fermer la fenêtre :

Puis vous devez changer votre `` méthode pour être

J’ai trouvé ceci pour être le seul moyen qui joue bien avec les et .

8voto

niranaam Points 31

Non seulement fermer la JFrame mais également à déclencher des événements WindowListener, essayez ceci :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X