IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[ActionPerformed] Fermer toute l'application


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut [ActionPerformed] Fermer toute l'application
    Bonjour,

    Pour mon application, j'ai une méthode main qui :
    1° charge la fenêtre principale de l'application et un écran de login
    2° Affiche l'écran de login.

    Si l'utilisateur s'authentifie j'affiche la fenêtre principale.
    Mais si il décide de fermer la fenêtre de login. Comment fermer tout ce qui est lancé par l'application (fenêtre principale, connection db, etc.. ) ?

    finalize() ?

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,
    Si la fenetre est une JFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Ou alors en utilisant un WindowListener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void windowClosed(WindowEvent e) {
      System.exit(0);
    }
    Par contre, si tu as des connexions à fermer proprement, il vaudrait mieux utiliser la seconde solution, pour tout faire comme tu veux.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ok, merci, je vais utiliser la seconde méthode. Merci beaucoup.

    heuu la méthode c'est une méthode que je crée moi même (que je peux appeler autrement) ou c'est dans Java (et que donc il va appler cette méthode des que l'on voudras quitter la JFrame ?


    Un dispose sur les autres fenêtres ouvertes c'est suffisant ?

    --------------------------------
    j'ai une méthode main d'ou démarre toute mon application, je lui ai rajouté cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void exit(){
    		System.out.println(new Date() + "\t : Fermeture de l'application.  ");
    		if (mainFrame != null){
    			mainFrame.dispose();
    		}
    		if (loginFrame != null){
    			loginFrame.dispose();
    		}
    		DataBase.close();
    		System.exit(0);
    	}
    Ca vous semble correct ?

  4. #4
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Où est ce que tu déclare ta mainFrame, ta loginFrame et ta dataBase?

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Le principe du WindowListener, c'est qu'il offre des méthodes appelées en cas de "WindowEvent", d'évènement sur les fenetres.

    Ca peut s'utiliser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class MonWindowListener implements WindowListener {
     
      public void   windowActivated(WindowEvent e) {}
      public void 	windowClosed(WindowEvent e) {
        if(e.getSource().equals(mainFrame))
          MaClasseMain.exit();
        else
          System.out.println("Vous avez fermé la fenetre :" + e.getWindow());
      }
      public void 	windowClosing(WindowEvent e) {}
      public void 	windowDeactivated(WindowEvent e) {}
      public void 	windowDeiconified(WindowEvent e) {}
      public void 	windowIconified(WindowEvent e) {}
      public void 	windowOpened(WindowEvent e) {}
    }
     
    ... // lors de la création de mainFrame et loginFrame
    MonWindowListener monListener = new MonWindowListener();
    mainFrame.addWindowListener(monListener);
    loginFrame.addWindowListener(monListener);
    Pour surveiller une fenetre, on lui ajoute un listener. La méthode windowClosed sera appelée lorsque l'utilisateur clique sur la croix, ou appuie sur alt+f4.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Descent
    Où est ce que tu déclare ta mainFrame, ta loginFrame et ta dataBase?
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class Main {
    ...
    private void init(){
     
    		try {
    			DataBase.init();
    		} catch (SQLException e) {
    			System.err.println("\t --> Erreur de connexion à la base de données");
    			e.printStackTrace();
    		}
     
     
    		loginFrame = new LoginFrame();
    		loginFrame.setVisible(true);
    		mainFrame = new MainFrame();
     
    	}
    ...
    }

    Ok super merci xavlours.

    J'ai crée une méthode close() pour LoginFrame et ajoute un windowListener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ...
    this.addWindowListener(new WindowListener(){
    			public void windowActivated(WindowEvent e) {}
    			public void windowOpened(WindowEvent e) {}
    ..
    }
     
    ..
     
    private void close(){
    		frame.dispose(); // frame représente ma fenêtre de login
    		System.out.println(new Date() + "\t : Quitte la fenêtre d'authentification. \t");
    		Main.exit(); //classe principale (cette méthode ferme tout ce qui est ouvert : frames, db,etc..)
    	}
    Mais il vaut mieux faire l'appel à ma méthode close dans windowClosing ou windowClosed ?

  7. #7
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class Main {
    ...
    private void init(){
     
    		try {
    			DataBase.init();
    		} catch (SQLException e) {
    			System.err.println("\t --> Erreur de connexion à la base de données");
    			e.printStackTrace();
    		}
     
     
    		loginFrame = new LoginFrame();
    		loginFrame.setVisible(true);
    		mainFrame = new MainFrame();
     
    	}
    ...
    }
    Ok, alors dans ta méthode init, il te suffit d'ajouter un écouteur sur ta fenêtre loginFrame comme te l'as expliquer xavlours.

    Cependant, tu peux faire cela plus simplement qu'il ne te l'as expliqué, en utilisant une classe interne anonyme.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public class Main { 
    ... 
    private void init(){ 
     
          try { 
             DataBase.init(); 
          } catch (SQLException e) { 
             System.err.println("\t --> Erreur de connexion à la base de données"); 
             e.printStackTrace(); 
          } 
     
     
          loginFrame = new LoginFrame(); 
          loginFrame.setVisible(true);
     
          mainFrame = new MainFrame(); 
     
          loginFrame.addWindowListener(new WindowAdapter(){
                 public void    windowClosing(WindowEvent e) {
                             //ton code pour tout fermer
                             mainFrame.dispose();
                             loginFrame.dispose();
                             DataBase.close();
                             System.exit(0);
                 }
          });
     
     
       } 
    ... 
    }
    Les ligne que j'ai ajouter te créer un écouteur de fenêtre "à la volée" grâce à une classe interne anonyme. J'utilise un WindowAdapter plutôt qu'un WindowListener car cela ne m'oblige pas à redéfinir toutes les méthodes contenues dans WindowListener.

    Par contre il faut que tu déclare ton loginFrame, tonmainFrame et ta database en final.

    Si tu as des questions sur mon code, n'hésite pas.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Descent
    J'utilise un WindowAdapter plutôt qu'un WindowListener car cela ne m'oblige pas à redéfinir toutes les méthodes contenues dans WindowListener.
    Cool l'astuce du WindowAdapter Merci.
    J'ai ajouté le windowListener dans ma classe..
    Ca ne change pas grand chose au fonctionnement. Mais y à t'il une raison pour utiliser ta façon ou la mienne ?
    --------------------

    Citation Envoyé par Descent
    Par contre il faut que tu déclare ton loginFrame, tonmainFrame et ta database en final.
    Ben oui mais alors je ne sais plus les instancier dans Main.init()

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    je pense qu'il vaut mieux employer WindowListener quand tu auras besoin de plusieurs evenement et WindowAdapter quand tu n'en as besoin que d'un seul

  10. #10
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Ta méthode marche?

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  11. #11
    Invité
    Invité(e)
    Par défaut
    witchounet :
    Oui ça bien sur.
    Mais il vaut mieux placer le window Listener dans la classe qui instancie la fenêtre en question ou dans la classe de la fenêtre elle-même ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Descent
    Ta méthode marche?
    Oui en tout cas System.outprintln("Close"), ça va..
    edit : avec ma méthode close() ça va aussi.

    mais ou dois-je metter ma méthode ? dans windowClosed ou windowClosing ? ---->
    Citation Envoyé par http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/WindowListener.html
    void windowClosed(WindowEvent e)
    Invoked when a window has been closed as the result of calling dispose on the window.
    ----------------------------------------------------------------------------
    void windowClosing(WindowEvent e)
    Invoked when the user attempts to close the window from the window's system menu.
    reste plus qu'a savoir si c'est mieux dans la classe même ou dans la classe sui instancie la fenêtre...

  13. #13
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Ben si ça marche laisse en l'état, rien ne t'empêche d'avoir l'écouteur dans la classe elle même.

    Sinon moi je placerais le code dans windowClosing.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Oui il faut sinon il n'est pas appelé. avec 'alt+f4'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fermer toutes les instances d'une application
    Par oieretxe dans le forum Android
    Réponses: 2
    Dernier message: 02/03/2015, 14h49
  2. Réponses: 6
    Dernier message: 04/06/2006, 20h02
  3. fermer toutes fenetres active de l'application avant quitter
    Par iam dans le forum Bases de données
    Réponses: 0
    Dernier message: 03/06/2006, 12h42
  4. Fermer toutes applications ouvertes
    Par kikica dans le forum Langage
    Réponses: 13
    Dernier message: 05/02/2006, 00h34
  5. [VB6] Quitter l'appli et fermer toutes les feuilles...
    Par The Bob dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo