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 :

[Swing] Fenêtre qui renvoie une information à sa mère lorsqu'elle se ferme


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Par défaut [Swing] Fenêtre qui renvoie une information à sa mère lorsqu'elle se ferme
    Bonjour,

    Je développe une petite IHM en SWING, et j'ai une fenêtre principale qui, à l'appuie sur l'un de ses boutons, ouvre une fenêtre fille. Comme le titre du topic l'indique, je me demande comment renvoyer des informations à la fenêtre principale en fonction du bouton actionné sur la fenêtre fille.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Stocker une référence sur la classe mère dans la classe fille, référence qui sera fournie en tant que paramètre du constructeur de la classe fille. Et bien sûr prévoir dans la classe mère une méthode pour mettre à jour les données.

    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Mere {
     
        private String data;
     
        public void actionPerformed (ActionEvent e){
             Fille fille  = new Fille(this);
        }
     
        public void setData (String data) {
            this.data = data;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Fille {
     
        private Mere mere;
     
        public Fille (Mere mere) {
             this.mere = mere;
        }
     
        public void actionPerformed (ActionEvent e){
             String machaine="toto";
             mere.setData(maChaine);
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Par défaut
    ca fait de la dépendance circulaire ça, il n'y a pas une solution plus élégante ?

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Les fenêtre fille ont très souvent (voir presque toujours) une référence vers la fenêtre mère, ça n'a rien d'inélégant .

    Après pour quelque chose d'un peu plus souple, si la fenêtre fille est une JDialog tu peux faire quelque chose de ce genre :
    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
    public class MyDialog extends JDialog {
     
        private int ret = JOptionPane.CLOSED_OPTION;
     
        private String data;
     
        public MyDialog(Frame parent) {
            super(parent, true);
        }
     
        // ok button click
        private void okButtonActionPerformed(ActionEvent evt) {
            data = ... // retreive data from GUI
            // test data validity, if data not valid then message and return
            ret = JOptionPane.OK_OPTION;
            dispose();
        }
     
        public static String showMyDialog(Frame parent) {
            String value = null;
            MyDialog dialog = new MyDialog(parent);
            dialog.setVisible(true); // wait until dialog is closed (dialog is modal)
            if(dialog.ret == JOptionPane.OK_OPTION) {
                value = dialog.data;
            }
            return value;
        }
    }
    Utilisé comme suit dans la JFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String value = MyDialog.showMyDialog(this);
    if(value != null) {
        // update frame data
    }
    L'inconvénient de cette méthode est qu'elle nécessite une JDialog modale.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    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
    Ou alors pour avoir quelque chose d'encore plus propre tu crée une interface pour ta classe Mere que tu passe à la fille.

    Ainsi la fille ne peut accéder qu'à certaine méthode de la classe Mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface IMere{
    public void changeData(Data data);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Mere implements IMere {//...}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Fille {
     
        private IMere mere;
     
        public Fille (IMere mere) {
             this.mere = mere;
        }
    ça fait encore de la dépendance circulaire mais c'est mieux caché

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Par défaut
    Ok, merci. Je me demandais s'il n'y avait pas d'autres mécanismes prévus par SWING.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2013, 15h02
  2. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 21h22
  3. [?] Fonction qui renvoie une table
    Par Dimitri_87 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/04/2007, 11h48
  4. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52

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