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 :

Comment passer une donnée d'un panneau à un autre


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut Comment passer une donnée d'un panneau à un autre
    Bonjour,

    Bon tout d'abord mon titre de topic est assez flou j'en conviens mais je vais essayer de l'expliquer mieux ici.

    En fait pour mon projet de stage je dois récupérer plusieurs informations sur la saisie d'un numéro. Ce numéro unique correspond à un produit. Il existe une base Access où je vais chercher tout les devis où apparait ce numéro. Jusque là ca marche à peu pres. Mais je vais aussi chercher l'information concernant les stocks dans un fichier Excel.

    J'ai organisé mon travail de cette façon (à mon avis c'est très mal pensé au départ, mais vous me direz): j'ai une fenêtre principale qui contient un panneau principal. Ce panneau va contenir mon panneau "PanneauAcces", et en dessous mon panneau "PanneauStock". Mais le problème est que je demande la saisie du numéro à l'utilisateur dans un JTextField contenu dans mon PanneauAccess se qui lance une recherche. Et je stocke cette recherche dans un attribut. Seulement voilà maintenant il faut que je récupère cette même recherche pour mon PanneauStock. Mais là je bloque complètement. Comment faire?

    Voilà quelques unes de mes classes simplifiées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class FenetrePrincipale extends JFrame {
     
        public FenetrePrincipale() {
            super("Devis rechange");
            setSize(1000, 700);
            setContentPane(new PanneauPrincipal());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class PanneauPrincipal extends JPanel {
     
        public PanneauPrincipal() {
            super(new GridLayout(0, 1));
            add(new PanneauAccess());
            add(new PanneauStock());
            setVisible(true);
        }
    }
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public class PanneauAccess extends JPanel {
     
        private Recherche rec;
     
        /**
         * <p>Instancie les champs de saisi, listes déroulantes, boutons
         * et icones pour le panneau présentant les devis rechange sous
         * Access</p>
         */
        public PanneauAccess() {
            super(new GridLayout(3, 1));
     
            /* champs de recherche */
            JPanel panneauAccessHaut = new JPanel(new GridLayout(2, 2, 10, 10)); 
            panneauAccessHaut.add(panneauPN());
            panneauAccessHaut.add(panneauAnnee());
            panneauAccessHaut.add(panneauAffaire());
            panneauAccessHaut.add(panneauErreur());
            add(panneauAccessHaut);
     
            /* champs de résultat */
            JPanel panneauAccessMilieu = new JPanel(new GridLayout(2, 2));
            panneauAccessMilieu.setBackground(Color.WHITE);
            panneauAccessMilieu.add(panneauFiche());
            panneauAccessMilieu.add(panneauDateDif());
            panneauAccessMilieu.add(panneauQte());
            panneauAccessMilieu.add(panneauCPP());
            add(panneauAccessMilieu);
     
            ...
     
            setVisible(true);
        }
     
        /**
         * <p>Champs de saisi du part number afin d'effectuer une recherche
         * sur celui-ci</p>
         * @return panneauPN, un panneau contenant un texte et un champs de saisi
         * du P/N
         */
        private JPanel panneauPN() {
            JPanel panneauPN = new JPanel(new FlowLayout());
            panneauPN.add(new JLabel("P/N :"));
            champsPN = new JTextField("");
            /* récupération de la valeur du champs sur "entrer" */
            champsPN.addActionListener(new ActionEntrerListener());
            champsPN.setColumns(10);
            panneauPN.add(champsPN);
     
            return panneauPN;
        }
     
        ...
     
        public class ActionEntrerListener implements ActionListener {
     
            /* (non-Javadoc)
             * @see java.awt.event.ActionListener#actionPerformed 
             * java.awt.event.ActionEvent)
             */
            @Override
            public void actionPerformed(ActionEvent evt){
                if(evt.getSource()==champsPN) {
                    JTextField PN = null;
                    PN = (JTextField)evt.getSource();
                    System.out.println((JTextField)evt.getSource());
                    rec = new Recherche(PN.getText());
                    try {
                        rec.recherchePN();
                        premierDevis();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
     
                if(evt.getSource()==champsAffaire) {
                    JTextField Affaire = null;
                    Affaire = (JTextField)evt.getSource();
                    System.out.println((JTextField)evt.getSource());
                    rec = new Recherche(Affaire.getText());
                    try {
                        rec.rechercheAffaire();
                        premierDevis();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
     
                Object monBouton = evt.getSource();
                if(monBouton.equals(precedent)) {
                }
                if(monBouton.equals(suivant)) {
                    suivant();
                }
            }
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class PanneauStock extends JPanel {
        // ici j'aimerai récupérer la recherche de PanneauAccess
    }
    Merci de votre aide future

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Je viens juste de me rendre compte qu'un héritage pourrait faire l'affaire. Mais là encore problème: j'hérite déjà dans PanneauStock de JPanel. Pfff

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Deux possibilités
    1. Tu stockes tes informations dans une variable static
    2. Tu crées un conteneur de données et tu partage la référence entre tes deux panneaux. Le premier alimente le conteneur et le second lit le conteneur
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Ah ok je commence peut être enfin à entrevoir à quoi sert ce static.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 47
    Par défaut
    Variable statique? Surement pas dans ce cas ci, encore moins un héritage

    Ici tout ce que tu as à faire c'est t'arranger pour conserver la référence de ton PanneauAccess dans la classe qui a besoin des résultats. Ensuite tu transforme ton PanneauAccess en Java Beans (c'est un Design Pattern assez simple), avec les accesseurs qui te permettront de récupérer les résultats.
    Tu peux aussi passer par une classe alternative comme le suggère Nemek, qui sera également un Java Beans pour bien faire ^^

    Tu n'auras plus alors qu'a faire, dans ton PanneauStock : thePanneauAccess.getResultats()

    Ou si tu choisis l'autre possibilité : Dans ton PanneauAccess : tonBean.setResultats(tesResultats) et de l'autre côté, dans ton PanneauStock : tonBean.getResultats().

    Le plus difficile ici sera de signaler à l'un qu'il doit récupérer les résultats de l'autre, et ça, le plus pro, c'est de passer par des Event et des Listener (qui rentrent également dans les préceptes des Java Beans ).

    Si tu as des questions sur la réalisation, hésite pas.

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    J'utiliserai plutôt un SwingWorker à la place d'évenement
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Passer une donnée d'un composant à un autre
    Par Zipit dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 08/11/2012, 13h54
  2. Réponses: 2
    Dernier message: 27/03/2012, 14h08
  3. Réponses: 13
    Dernier message: 13/09/2006, 21h39
  4. Réponses: 8
    Dernier message: 04/04/2006, 17h29
  5. Comment passer une procédure en paramètre ?
    Par gudul dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2005, 13h57

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