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 :

Communication entre deux formulaires liés


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Points
    34
    Par défaut Communication entre deux formulaires liés
    Bonsoir à tous, quelqu'un pourrait-il me dire pourquoi je n'arrive pas à renseigner le champ txtCodeEnf du formulaire ActeNaissSuite par la valeur TxtCodeActe du formulaire "FormANaiss" de depuis lui?

    Code du formulaire FormANaiss

    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
    public final class FormANaiss extends javax.swing.JFrame {
      private javax.swing.JTextField TxtCodeActe;
      private ActeNaissSuite suite = new ActeNaissSuite(this); // instance du formulaire ActeNaissSuite
     
       public FormANaiss() {
           initComponents();
       }
     
     private void cmdSuiteActionPerformed(java.awt.event.ActionEvent evt) {                                         
             suite.setVisible(true);
                     suite.setTxtCodeEnf(getTxtCodeActe());/* je veux remplir le champ txtCodeEnf de ActeNaissSuite à partir de ce formulaire par le bouton suite,mais pas moyen.j'ai l'impression  qu'il ne sais pas communiqué avec ActeNaissSuite */     
        }     
     public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
     
                @Override
                public void run() {
                    new FormANaiss().setVisible(true);
                }
            });
        }        
     
    public String getTxtCodeActe() {
            return TxtCodeActe.getText().trim();
        }
    }
    code du formulaire ActeNaissSuite

    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
    public class ActeNaissSuite extends javax.swing.JFrame {
       private FormANaiss frmANaiss;// instance de FormANaiss
     private String txtCodeEnf;
     
    public ActeNaissSuite(FormANaiss frmANaiss) {
            this.frmANaiss = frmANaiss;
            initComponents();
    }
     private void CmdPcdtActionPerformed(java.awt.event.ActionEvent evt) {                                        
            // TODO add your handling code here:
             frmANaiss.setVisible(true);// Appel du formulaire FormANaiss
     
        }     
     
     public void setTxtCodeEnf (String txtCodeEnf) { // accesseur que j'utilise dans FormANaiss pour remplir champ txtCodeEnf
            this.txtCodeEnf = txtCodeEnf;
        }
     
    public static void main(String args[]) {
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    FormANaiss frmNaiss= new FormANaiss();
                    new ActeNaissSuite(frmNaiss).setVisible(true);
                }
            });
     
        }
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    ta méthode cmdSuiteActionPerformed(...) est bien appelée quelque part ?

    Tu testes bien par la classe FormANaiss ? Parce que par la classe ActeNaissSuite , tu as 2 instances de ActeNaissSuite (une créée par FormANaiss et une créée dans la méthode Main de ActeNaissSuite) : une seule des deux sera mise à jour dans cmdSuiteActionPerformed(..)...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Points
    34
    Par défaut Communication entre deux formulaires liés
    Bonjour Joel.Drigo,j'ai pas très bien compris,voulez vous dire que mon programme crée deux instances de AcetNaissSuite ? Et c'est parce qu 'il y a deux instances que je n'arrive pas à affecter depuis le formulaire FormActeNaiss la valeur du champ txtCodeEnf dans le champ TxtCodeActe de ActeNaissSuite?

    Autrement comment dois-je procédé? l'idée était de pouvoir naviguer entre les deux au moyen des boutons. Du Formulaire "FormANaiss" le click sur le bouton "CmdSuite" appele le formulaire "ActeNaissSuite" et le bouton "CmdPcdt" du formulaire "ActeNaissSuite" affiche la même instance de "FormActeNaiss".Ce que fait déjà bien mon code, mais j'arrive pas en renseigner le champ TxtCodeActe en même temps que je le formulaire ActeNaissSuite appelle.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par coolanso Voir le message
    Bonjour Joel.Drigo,j'ai pas très bien compris,voulez vous dire que mon programme crée deux instances de AcetNaissSuite ? [

    Une est créée dans FormANaiss, en variable de classe, par le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     private ActeNaissSuite suite = new ActeNaissSuite(this); // instance du formulaire ActeNaissSuite
    Une autre est créée dans la méthode main de ActeNaissSuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void main(String args[]) {
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    FormANaiss frmNaiss= new FormANaiss(); // donc une première instance est créee dans FormANaiss
                    new ActeNaissSuite(frmNaiss).setVisible(true); // ici une seconde instance
                }
            });
     
        }
     
    }
    Citation Envoyé par coolanso Voir le message
    Et c'est parce qu 'il y a deux instances que je n'arrive pas à affecter depuis le formulaire FormActeNaiss la valeur du champ txtCodeEnf dans le champ TxtCodeActe de ActeNaissSuite?
    Tout dépend comment tu testes : si tu lances la méthode main de ActeNaissSuite : comme FormActeNaiss ne modifie la variable txtCodeEnf que de l'instance de FormActeNaiss sur laquelle elle a un lien, si tu regardes dans l'autre instance, tu pourras penser que çà ne fonctionne pas.

    Citation Envoyé par coolanso Voir le message

    Autrement comment dois-je procédé? l'idée était de pouvoir naviguer entre les deux au moyen des boutons. Du Formulaire "FormANaiss" le click sur le bouton "CmdSuite" appele le formulaire "ActeNaissSuite" et le bouton "CmdPcdt" du formulaire "ActeNaissSuite" affiche la même instance de "FormActeNaiss".Ce que fait déjà bien mon code, mais j'arrive pas en renseigner le champ TxtCodeActe en même temps que je le formulaire ActeNaissSuite appelle.
    Je dirais que c'est un peu se compliquer la vie que de faire 2 fenêtres qui s'alternent, mais bon, il suffit que chacune d'entre elle ait une référence sur l'autre, et ça peut le faire : c'est le cas quand tu démarres par la méthode main de FormActeNaiss : elle a une référence (suite) sur ActeNaissSuite et lui passe sa référence par le constructeur (le this de suite= ActeNaissSuite(this).

    Le plus simple étant de faire une seule fenêtre avec 2 JPanel, en en affichant qu'un seul des 2 à la fois (avec des boutons Suivant et Précédent, pour afficher l'un ou l'autre), éventuellement en s'inspirant de cet article (On peut trouver différents projets ou bibliothèquess de composants qui proposent des implémentations de wizards également).

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Points
    34
    Par défaut Communication entre deux formulaires liés
    je me demande si ce n'est pas la méthode setTxtCodeEnf () qui me joue des tours. Comment lui dire d'affecter la valeur de la Methode à mon JTextField?

    p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ublic class ActeNaissSuite extends javax.swing.JFrame {
       private FormANaiss frmANaiss;// instance de FormANaiss
     private String txtCodeEnf;
     
    public void setTxtCodeEnf (String txtCodeEnf) { // ici la méthode prend en paramétre uns String.
            this.txtCodeEnf = txtCodeEnf;
        }
     
    }
    dans FormANaiss

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public final class FormANaiss extends javax.swing.JFrame {
      private javax.swing.JTextField TxtCodeActe;
      private ActeNaissSuite suite = new ActeNaissSuite(this);
     
    private void cmdSuiteActionPerformed(java.awt.event.ActionEvent evt) {                                         
             suite.setVisible(true);
                     suite.setTxtCodeEnf(getTxtCodeActe());/*en faisant ainsi,je me demande bien comment la méthode setTxtCodeEnf() sait qu'il s'agit du champ TxtCodeEnf de ActeNaisssuite que je veux remplir ?*/     
        }   
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Quel JTextField ?

    De ce que je comprends, tu as un JTextField dans FormANaiss, et quand tu appelles cmdSuiteActionPerformed() ça lit la valeur dans ce JTextField et ça le transmets à la variable txtCodeEnf de ActeNaissSuite, par sa méthode setTxtCodeEnf : si tu as un JTextField dans ActeNaissSuite (que je ne vois pas dans le code que tu as posté), il ne sera effectivement pas modifié, vu que la méthode ne modifie qu'une variable de type String. Tu as un JTextField dans ActeNaissSuite, qui devrait recevoir la valeur saisie dans celui de FormANaiss ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Points
    34
    Par défaut Communication entre deux formulaires liés
    C'est exactement ça, désolé de ne t'avoir pas fait voir le JTexfield en question. Comme tu me comprends maitenant,comment pourrais-je modifier la valeur TxtCodeEnf de mon formualire ActeNaissSuite depuis FormANaiss? dois-je modifier ma méthode setTxtCodeEnf ()?
    Les propriétés de ActeNaissSuite étant privée je ne peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Suite. TxtCodeEnf. setTxtCodeEnf (getTxtCodeActe ());
    pour préciser que c'est la valeur de TxtCodeEnf que je souhaite modifier.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Donc tu as un JTextField dans ActeNaissSuite : déclares donc une variable de classe qui le référence, comme tu as fait pour le JTextField dans FormANaiss.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ActeNaissSuite extends javax.swing.JFrame {
     
        private JTextField codeEnfJTextField; // je ne sais pas comment tu l'as appelé, alors je mets ce nom pour l'exemple
     
        ...
     
     
    }
    Tu as forcément une méthode où tu le créées, en local à cette méthode, donc, au lieu qu'il soit local à la méthode, il devient de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
     codeEnfJTextField = new JTectField(); // il suffit d'enlever le type devant ta variable
    ...
    et ensuite ta méthode devient tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setTxtCodeEnf (String txtCodeEnf) { // ici la méthode prend en paramétre uns String.
            this.txtCodeEnf = txtCodeEnf; // du coup, cette variable ne pourrait ne plus être utile (puisque sa valeur serait dans un jtextfield)
            this.codeEnfJTextField.setText(txtCodeEnf);
        }

Discussions similaires

  1. reprendre un enchainement de code entre deux formulaires.
    Par scully2501 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 16h11
  2. Communication entre deux Executables ?
    Par QAYS dans le forum Langage
    Réponses: 8
    Dernier message: 11/05/2005, 14h41
  3. communication entre deux executables
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 13/04/2005, 22h19
  4. Communication entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2005, 09h14
  5. Réponses: 5
    Dernier message: 25/03/2003, 19h43

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