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

Agents de placement/Fenêtres Java Discussion :

[JDialog] comment supprimer entièrement une fenêtre ?


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut [JDialog] comment supprimer entièrement une fenêtre ?
    Bonjour,

    J'ai actuellement un problème qui je crois vient de la suppression (ou plutôt de le non-suppression) d'une instance d'une classe héritant de la class JDialog. J'explique :

    Mon appli fait appelle à une classe A héritant de JDialog, ayant un listener sur un bouton d'enregistrement static d'une autre class B (la classe B permettant la création d'une personne dans la base de données).

    Lorsque je fait appelle une première fois à la classe A, tout se passe bien, la personne se crée dans la classe B.

    Seulement lorsque je fais appelle à la classe A une deuxième fois, le listener sur le bouton d'enregistrement de la classe B se déclenche deux fois (donc j'ai deux fois la même personne qui se crée).

    Idem lorsque je fais appel une troisième fois à la classe j'ai 3 même personnes qui se crée.

    Pourtant lorsque j'ai fini le traitement je fait un dispose() sur la classe A ce qui est censé detruire le listener non ?

    Les informations qui s'ajoutent dans la base me permettent de dire que la mutliplication des ajouts est bien du à la multiplication d'instance de classe A mais je vois pas pourquoi ? Et je n'ai pas trouver d'informations dans la FAQ ni sur google à moins que je ne sache pas chercher...

    Quelqu'un peut m'aider ? :/

    PS : désolé pour le roman, j'espère au moins qu'il est clair.

    Merci d'avance

  2. #2
    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 : 36
    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
    Au pire, ce que tu peut faire, c'est surcharger la méthode dispose de la classe A et y enlever le listener avant de faire un dispose dessus.

    Je veut dire quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void dispose(){
    <div style="margin-left:40px">removeListener();//Là, tu enleves le listener sur l'objet auquel tu l'as ajouté
    super.dispose();</div>}

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    bon j'ai utilisé un autre système qui est de faire un setVisible(false) a la sortie puis dans la classe main de creer une variable de type A.

    A chaque appel je test si cette variable existe, si oui je la réaffiche, sinon je la créée...

    C'est un peu du bidouillage et c'est pas propre puisqu'au réaffichage, l'instance à garder ses valeurs donc on a déjà des valeurs dans les champs texte... il faudrait au pire que je fasse une fonction qui remmette les champ vide mais bon... si quelqu'un a une meilleure solution je la prend volontier...

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    witchounet a raison : si tu n'enlèves pas ton instance de classe de ta liste de listener, elle ne sera pas entièrement détruite.
    Du coup, quand tu vas créer un autre objet de cette classe, tu vas l'ajouter à ta liste de listener et tu propageras ton évènement sur 2 objets.
    Puis sur 3, 4, 5 objets, au fur et à mesure que tu ajouteras des personnes...

Discussions similaires

  1. Comment savoir si une fenêtre est maximisée ?
    Par Silverstone dans le forum Windows
    Réponses: 4
    Dernier message: 20/09/2006, 21h01
  2. [C#] Comment supprimer/remplacer une couleur d'une image ?
    Par rannounna dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/05/2006, 12h37
  3. Comment réduire explicitement une fenêtre ?
    Par ToYonos dans le forum MFC
    Réponses: 1
    Dernier message: 13/09/2005, 16h28
  4. Comment savoir si une fenêtre s'est fermée
    Par niuniuk36 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/05/2005, 14h49
  5. Réponses: 2
    Dernier message: 13/12/2004, 15h16

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