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] Durée de vie et mort d'une JDialog


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut [JDialog] Durée de vie et mort d'une JDialog
    J'ai fait des recherches sur le forum concernant les JDialog, mais je n'ai pas trouvé de réponses très précises à ma question.

    J'ai créé une boite de dialogue un peu compliquée (les JOptionPane ne suffisaient pas). Dans cette boite (que je rends modale), j'ai pas mal d'infos à récupérer.

    Donc (si j'ai bien compris), contrairement aux JOptionPanes, la JDialog doit encore exister après sa fermeture par l'utilisateur, c'est ça ?
    Elle ne renvoit pas une valeur à sa fermeture, il faut la chercher soi-même en prévoyant des getters ? Je me trompe ?

    Un exemple complet est donné ici (trouvé sur le net) :

    example

    Est-ce que mon raisonnement est juste ?
    C'est comme ça qu'il faut faire ?

    C'est seulement quand on est sûr d'avoir tout récupéré, qu'on peut détruire une JDialog par la méthode .dispose() ?

  2. #2
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    La JDialog ne doit pas exister après sa fermeture par l'utilisateur, mais elle le PEUT.

    Personnellement quand je récupère plusieurs données je m'y prend comme suit, en changeant l'ArrayList par un tableau quand il s'agit de plusieurs données d'un même type :
    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
     
    public class MaJDialog extends JDialog implements ActionListener {
      private static ArrayList liste;
     
      public MaJDialog(Frame frame, String title, boolean modal) {
        super(frame, title, modal);
        /** création de la JDialog*/
        this.setVisible(true);
      }
      public static ArrayList ShowMaJDialog(Frame frame, String title, boolean modal) {
        new MaJDialog(frame, title, modal);
        return liste;
      }
      public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("valider")) {// Les informations sont validées par l'utilisateur
          /** On place toutes les données dans l'ArrayList */
        }
        this.setVisible(false);
        this.dispose();
      }
    }
    Comme ça on n'a plus besoin de gérer sa fermeture, juste de traiter les données renvoyées.

  3. #3
    Membre éclairé Avatar de bubu56
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    Personnellement je te conseille plutôt la méthode que tu décris avec les getters…
    une fois que tu as fini avec les getter tu peux appeler dispose...

    surtout que la méthode ShowMaJDialog renvoit une reference à la liste, et rien ne te garantie qu'une autre instance du dialogue (ou une autre classe) ne va pas modifier cette même liste par la suite...

  4. #4
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    C'est vrai qu'il fallait utiliser ma boite de dialogue avec une seule Frame et en modale. Mais je préfère ne plus m'occuper de la boite de dialogue une fois qu'elle a rempli son office, d'autant que j'utilise toujours la même, je change juste le panneau à afficher avec un paramètre supplémentaire.
    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
     
    public class MaJDialog extends JDialog implements ActionListener {
      private ArrayList liste;
     
      public MaJDialog(Frame frame, String title, boolean modal) {
        super(frame, title, modal);
        /** création de la JDialog*/
        this.setVisible(true);
      }
      public static ArrayList ShowMaJDialog(Frame frame, String title, boolean modal) {
        MaJDialog maJD = new MaJDialog(frame, title, modal);
        return maJD.getListe();
      }
      public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("valider")) {// Les informations sont validées par l'utilisateur
          /** On place toutes les données dans l'ArrayList */
        }
        this.setVisible(false);
        this.dispose();
      }
      public ArrayList getListe() {
        return liste;
      }
    }[/LEFT]
    La remarque de bubu56 va me permettre d'épurer mon programme d'un problème, merci

  5. #5
    Membre éclairé Avatar de bubu56
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    cette méthode est bonne si tu n'as qu'un seul objet à récupérer et dans la plupart des cas, cela suffit, mais si tu as plusieurs objets à récupérer tu seras obligé de passer par la première méthode décrite.

    avec la méthode de iuz il faut mettre le constructeur de MaJDialog private afin d'être sur que le développeur utilise la classe MaJDialog correctement (c'est à dire en appelant ShowMaJDialog).

    Autre chose, les noms de méthodes sont sensés commencer par des minuscules donc il faudrait renommer ShowMaJDialog en showMaJDialog

  6. #6
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Merci pour vos explications et vos propositions.

    J'ajoute le témoignage d'un exemple vu dans le bouquin de C. Delannoy.

    Il crée une JDialog maDialog depuis la JFrame qui la lance.

    Ensuite, depuis la JFrame même, il fait

    maDialog.setVisible(true);

    et ceci suffit à mettre la JDialogue en attente de réaction par l'utilisateur (surtout si elle est modale).

    Ensuite, directement après (la ligne de code juste après), il récupère ses données via une classe Info qui sert de transmission de valeurs de différentes variables, ensuite il détruit la JDialog (la ligne juste après encore).

    Je crois que je vais donc aussi opter pour ce genre de fonctionnement.

    Merci à tous. Je mets ce post en résolu !

    Long live to Developpez.com

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

Discussions similaires

  1. Durée de vie d'une session
    Par khokho dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 28/06/2006, 21h31
  2. durée de vie d'une instruction
    Par poporiding dans le forum C++
    Réponses: 6
    Dernier message: 08/06/2006, 16h11
  3. Réponses: 3
    Dernier message: 27/04/2006, 11h37
  4. Durée de vie d'une session
    Par dbass dans le forum Langage
    Réponses: 8
    Dernier message: 21/03/2006, 19h38
  5. [AS2] durée de vie d'une classe (extends movieclip)
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 23/07/2005, 13h33

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