Traitements avant fermeture application
Salut,
Si j'ai bien compris, ton soucis est de pouvoir gérer des traitements avant fermeture de ton application (Alt + F4, ou autres méthodes)
Par défaut le DefaultCloseOperation est à HIDE_ON_CLOSE, c'est à dire que ta fenêtre disparaît mais ton programme est toujours actif.
Alors lorsque l'on souhaite quitter l'application on passe sur un EXIT_ON_CLOSE, qui génère un appel à System.exit();
Dans ton cas, voici ce qui est préconisé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
JFrame f = new JFrame("Test");
f.setSize(200,200);
f.setVisible(true);
//Les actions Close seront desactivés
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//On ajoute un listener de fenêtre et on implémente la function WindowClosing
f.addWindowListener(new WindowListener(){
public void windowClosing(WindowEvent arg0) {
//Ici on demande la confirmation de fermeture de l'application
int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous vraiment quitter ?", "Confirmation", JOptionPane.YES_NO_OPTION);
if (reponse == JOptionPane.YES_OPTION){
//Sauvegarde des données et autres traitements
this.writeConfInFile();
//Quit l'application
System.exit(0);
}
} |
Dans cet exemple on confirme seulement la fermeture de l'application, mais on peut très bien imaginé (comme dans un éditeur de fichier), qu'il vérifie l'état des fichiers et si un n'est pas enregistré, qu'il propose l'enregistrement
Pour la partie Item Fichier -> Quitter, tu déporte simplement le code du windowsEvent dans une méthode et tu l'appelles suite a ton Evènement de click, malheureusement on ne peux pas avoir accès directement à l'action qui est lancé par le "Exit" de la JFrame.
Par contre comme le souligne bcoprescu, tu peux passer par l'instruction
processWindowEvent( new WindowEvent( this, WindowEvent.WINDOW_CLOSING) );
Ensuite c'est à toi de voir si ton code de fermeture doit être placé dans le WindowListener, ou dans un controlleur partagé entre ton WindowListener et ton ActionListener de menu