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

 Java Discussion :

Afficher un meme objet sur deux Jpanel différents


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 63
    Par défaut Afficher un meme objet sur deux Jpanel différents
    Bonjour à tous,

    J'ai une petite question qui est sûrement très bête mais bon ...

    J'ai créé une liste déroulante (JComboBox) et je souhaite afficher une instance de cet objet sur deux JPanel différents afin que sur les deux JPanel la liste soit synchronisée. J'ai essayé de faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    JComboBox maListe = new JComboBox();
    try {
    	ResultSet result = db.query("SELECT nom FROM partenaires");
    	while(result.next()) {
    		maListe .addItem(result.getString("nom"));
    	}
    } catch (SQLException e1) {
    	e1.printStackTrace();
    }
     
    panel1.add(maListe);
    panel2.add(maListe);
    Mais au résultat ma liste ne s'affiche que sur le panel2 et rien sur le panel1. Est-ce normal ? Qu'est ce que j'ai loupé ?

    Est-ce possible de synchroniser une liste comme ça ? Par synchroniser je veux dire que si l'utilisateur sélectionne une entrée dans la liste affichée sur le panel2 je veux que la même entrée se sélectionne sur le panel1.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    A priori, les listes n'ont pas le don d'ubiquité, elles ne peuvent pas être à deux endroits à la fois. Vous devez créer deux listes différentes et les synchroniser à la main.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Un composant est fortement lié à son composant parent, car c'est le layout de ce dernier qui détermine sa taille et sa position. De plus il doit pouvoir communiquer avec son parent pour "demander" à être redessiner...

    De ce fait un composant graphique ne peut être situé que dans un seul et unique parent. Il n'y a pas moyen de dupliquer les composants aussi facilement !




    Mais la vie étant bien faite, l'API Swing intègre une séparation des données via la modèle MVC, en gros :
    • Le Modèle de données conserve justement les données.
    • La Vue correspond au composant graphique en lui même, tel qu'il est visible par l'utilisateur.
    • Enfin le Controlleur permet de faire le lien entre les deux, généralement via des événements sous Swing.
      Cela permet au modèle et la vue d'interagir entre deux :
      • Lorsque les données de la Vue est modifié (par l'utilisateur par exemple), elle se contente de l'indiquer au Modele via le Controlleur.
      • Lorsque le Modèle est modifié (depuis une Vue ou via du code), il le signale à la Vue qui se mettra donc à jour.



    Ainsi dans ton cas tu dois utiliser deux JComboBox mais un seul et unique modèle de données (DefaultComboBoxModel dans ton cas).


    Exemple :
    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
    	// On crée le modèle de données :
    	DefaultComboBoxModel model = new DefaultComboBoxModel();
     
    	// On le rempli :
    	model.addElement("Un");
    	model.addElement("Deux");
    	model.addElement("Trois");
    	model.addElement("Quatre");
    	model.addElement("Cinq");
    	model.addElement("...");
     
    	// On crée DEUX comboBox avec le MEME modèle :
    	JComboBox maListe1 = new JComboBox(model);
    	JComboBox maListe2 = new JComboBox(model);
     
    	// On crée un premier panel avec un FlowLayout (layout par défaut) :
    	JPanel p1 = new JPanel();
    	p1.add(new JLabel("Panel 1 : "));
    	p1.add(maListe1);
     
    	// On crée un second panel avec un BorderLayout :
    	JPanel p2 = new JPanel(new BorderLayout());
    	p2.add(new JLabel("Panel 2 : "), BorderLayout.NORTH);
    	p2.add(maListe2);
     
    	// On affiche le tout dans un JOptionPane :
    	JOptionPane.showMessageDialog(null, new Object[]{ p1, new JSeparator(), p2 });
    On a 2 JComboBox dans 2 JPanels différent, mais chaque modification sur l'un est automatiquement reporté sur l'autre

    a++

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 63
    Par défaut
    Excellent !!! C'est exactement ce que je voulais faire

    Merci pour cette explication du modèle MVC. Je comprends un peu mieux son implémentation en Java. Avec l'habitude ça devrait devenir plus automatique.

    Je n'ai plus qu'à noter que ce post est résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2013, 18h38
  2. Réponses: 17
    Dernier message: 30/05/2011, 10h14
  3. [Conception] Inscription simultanée sur deux sites différents
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/04/2006, 10h28
  4. SQL Query sur deux tables différentes.
    Par kabal22 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/12/2005, 17h52
  5. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21

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