Liste déroulante actualisante

Signaler
Messages postés
12
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
21 mai 2010
-
Messages postés
36
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
6 juin 2008
-
Bonjour,
J'ai un JPanel contenant un formulaire.
J'ai créé 2 JPanels "president" et "tresorier" pour les 2 parties de ce formulaire, et j'ai une liste déroulante qui sélectionne le formulaire.
Je voudrais que lors de la sélection dans la liste déroulante, le formulaire choisi s'affiche directement.

// MISE EN PAGE
        MigLayout tab = new MigLayout();
        setLayout(tab);
        /////////////////////////////////////////////////////////////////////////////////
        
        // PANEL BAS GAUCHE
        JPanel panel_bg = new JPanel();
        panel_bg.setBorder(BorderFactory.createLineBorder(Color.red));
        panel_bg.setLayout(new MigLayout());
        // Liste déroulante
        String[] tab_contact = new String[2];
          tab_contact[0] = new String("Président");
          tab_contact[1] = new String("Trésorier");
          DefaultComboBoxModel modele = new DefaultComboBoxModel(tab_contact);
          JComboBox liste_contact = new JComboBox(modele);
        panel_bg.add(liste_contact, "wrap");
         
        // PANEL PRESIDENT (BAS GAUCHE)    
        JPanel president = new JPanel();
        president.setLayout(new MigLayout());
        president.add(new JLabel("Président"), "wrap");
        president.add(new JLabel("Nom"), "align right");
        JTextField pr_nom = new JTextField(20);
        president.add(pr_nom);
        // ...
        
        // PANEL TRESORIER (BAS GAUCHE)
        JPanel tresorier = new JPanel();
        tresorier .setLayout(new MigLayout());
        tresorier .add(new JLabel("Trésorier"), "wrap");
        tresorier .add(new JLabel("Nom"), "align right");
        JTextField tr_nom = new JTextField(20);
        tresorier .add(tr_nom);
        // ...

            // Ajout du panel sélectionné avec la variable "contact" au panel_bg
            if (contact=="president")
            {panel_bg.add(president);}
            if (contact=="tresorier")
            {panel_bg.add(tresorier);}


Je dois sans doute avoir besoin d'une variable de classe "contact" qui est modifiée lors de la sélection dans la liste déroulante?

Merci d'avance

3 réponses

Messages postés
36
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
6 juin 2008

Ton problème viens du fait que l'ajout du panel est devrait être dans une fonction actionperformed d'un actionListener que tu ne semble pas avoir ajouté à ta JCombobox.(si tu veux que le changement soit dynamique il te faut utiliser un Listener).
Ensuite avec les String il ne faut utiliser = = mais la fonction equals.
Et pour finir il ne faudra pas que tu oublis de supprimer le composant déjà présent dans panel_bg.

bashfr.org
Messages postés
12
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
21 mai 2010

J'ai mis un ItemListener dans ma classe "dossier_unique" du package "vue"
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
liste_contacts.addItemListener(new but_dossier_unique());
 

<!-- END TEMPLATE: bbcode_code -->et la fonction itemStateChanged dans la classe "but_dossier_unique" du package "controleur"
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
package controleur;
 
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
 
publicclass but_dossier_unique implements ItemListener {
 
publicvoid itemStateChanged(ItemEvent e){
if(e.getStateChange()==ItemEvent.SELECTED){
//AFFICHER LA BONNE FRAME
switch(((JComboBox)e.getSource()).getSelectedIndex()){
//TODO (genre setVisible(true/false) )
}
}
}
}
 

<!-- END TEMPLATE: bbcode_code -->J'ai toujours l'affichage de mes
panels dans la fenêtre avec la liste déroulante, mais quand je
sélectionne, la panel ne se met pas à jour (changement de
formulaire)...


Je ne sais pas trop quoi mettre dans la fonction itemStateChanged...
Messages postés
36
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
6 juin 2008

Si il y a eu un changement tu fais un remove du Panel que tu veux changer et un add du nouveau.

bashfr.org