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

Java Discussion :

Problème fermeture de fenetre


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut Problème fermeture de fenetre
    Bonjour à tous,

    Je reviens vers vous avec un ultime problème.
    J'ai sur mon application, un JButton qui lors d'un clic dessus, ouvre une nouvelle fenêtre contenant une JTable chargé par des données d'une base de données.

    Lorsque j'ouvre ma fenêtre pour la première fois au lancement de l'application, pas de soucis, le tableau se remplit bien, je la referme, et si je l'ouvre directement après, le tableau est remplit mais en double !

    Le problème vient certainement de la méthode de fermeture de la fenêtre.

    J'ai donc d'abord essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Sauf que toute l'application se ferme, j'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    Mais la, la fenêtre se ferme, mais ne se "détruit" pas, je me retrouve toujours avec un tableau remplit en double ...

    Pour le EXIT_ON_CLOSE, c'est plutôt normal d'obtenir ce résultat, mais je trouve ceci plus bizarre avec le DISPOSE_ON_CLOSE qui est censé détruire la fenêtre non ?

    Je suis à cours d'idées :/

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par H4rDBuG Voir le message
    mais je trouve ceci plus bizarre avec le DISPOSE_ON_CLOSE qui est censé détruire la fenêtre non ?
    Non : le dispose libère seulement les ressources de la fenêtre lié au système d'exploitation. En aucun cas il ne détruit l'objet Java. Si tu ré-affiches la même fenêtre ces ressources seront recréé...




    D'après ce que tu dis, je suppose que tu crées la fenêtre/table une seule fois, et que tu y ajoutes des données à chaque fois que tu l'affiches.


    As-tu réellement besoin de conserver la fenêtre une fois fermée et de conserver sa référence ?

    Il serait plus simple de ne pas la conserver une fois fermée, et de la recréer si besoin...


    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Merci adiGuba de ta réponse, c'est exactement ce que je veux faire, mais je ne connais pas la méthode pour la supprimer à la fermeture ...

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Un petit remove() ou removeAll() sur le panel contenant la JTable. Ensuite tu enchaîne avec le dispose et le tour devrait être joué

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Je vois pas trop ou placer le remove(), du fait que j'appelle la méthode setDefaultCloseOperation(), je ferme la fenêtre avec la croix rouge

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Voila le code ma classe tabCategorie (qui ne contient que mon JTable avec 2 boutons
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    package gestionintendance;
     
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.print.PrinterException;
    import java.io.File;
    import java.io.IOException;
    import javax.swing.*;
    import javax.swing.table.*;
     
    public class tabCategorie
    {
        static String[] titreColonnes = {"NomCategorie"}; 
     
        public tabCategorie(Object[][] donnees, String[] titreColonnes,String titre)
        {
    	JFrame frame = new JFrame(titre);
     
    	DefaultTableModel model = new DefaultTableModel(donnees,titreColonnes);
    	final JTable jt = new JTable(model);
     
            jt.getColumnModel().getColumn(0).setPreferredWidth(200);
     
            JButton print = new JButton("Imprimer");
     
            print.addActionListener(new ActionListener() 
            {
                @Override
                public void actionPerformed(ActionEvent evt) 
                {
                    try 
                    {                
                        jt.print();
                    } 
                    catch (PrinterException ex) 
                    {
                        System.out.println(ex.getMessage());
                        System.out.println(ex);
                    }
                }
    	});
     
            JButton export = new JButton("Exporter vers excel");
     
            export.addActionListener(new ActionListener() 
            {
                @Override
                public void actionPerformed(ActionEvent evt) 
                {
                    try 
                    {                
                        String user = System.getProperty("user.name");
                        ExcelExporter exp = new ExcelExporter(); 
                        exp.exportTable(jt, new File("C:/Users/"+user+"/Desktop/fiche-categorie.xls"));
                    } 
                    catch (IOException ex) 
                    {
                        System.out.println(ex.getMessage());
                        System.out.println(ex);
                    }
                }
    	});
     
            JPanel pan = new JPanel();
    	JScrollPane pane = new JScrollPane(jt,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            pane.setPreferredSize(new Dimension(200,300));
            pan.add(pane);
            pan.add(print);
            pan.add(export);
    	frame.add(pan);
    	frame.pack();
            frame.setLocationRelativeTo(null);
    	frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    j'appelle l'ouverture de cette fenêtre de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabCategorie t = new tabCategorie(Categorie.getCategorie(Categorie.getAll()),tabCategorie.titreColonnes,"Consultation des categories");

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par H4rDBuG Voir le message
    Merci adiGuba de ta réponse, c'est exactement ce que je veux faire, mais je ne connais pas la méthode pour la supprimer à la fermeture ...
    Ben tu dois conserver la référence quelque part. Il suffit de ne pas le faire...


    Après sans voir ton code c'est difficile de t'aider plus !


    a++

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

Discussions similaires

  1. problème de fermeture de fenetre
    Par cedouche dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 25/01/2008, 13h00
  2. problème fermeture fenetres téléchargements
    Par djee74 dans le forum Windows Vista
    Réponses: 4
    Dernier message: 30/05/2007, 09h23
  3. [JSP] fermeture de fenetre
    Par JackNanPie dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 05/01/2005, 11h38
  4. fermeture de fenetre
    Par JackNanPie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/01/2005, 14h34
  5. [debutant] Fermeture de fenetre
    Par wkd dans le forum Agents de placement/Fenêtres
    Réponses: 26
    Dernier message: 04/06/2004, 17h01

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