Bonjour,

J'ai un problème dans Swing, avec l'utilisation du CardLayout. Ce CardLayout est controlé par 2 JButton: en fonction du bouton sur lequel on clic, le panel correspondant est affiché dans le CardLayout.

Seulement uand je change le JPanel affiché dans le CardLayout (avec CardLayout.show()), il m'affiche bien le panel désiré, mais il a supprimé tous les composants "Choice" (liste déroulante) que ce panel contenait.

Voici une version simplifié de mon code, avec les éléments concernés :
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
 
public class IhmProjet extends JFrame implements ActionListener {
        final static String ETUDIANT = "Etudiant";
        final static String ENSEIGNANT = "Enseignant";
        JButton btnEtu;
        JButton btnEns;
 
        public IhmProjet(){
        btnEtu = new JButton(ETUDIANT);
        btnEns = new JButton(ENSEIGNANT);
 
	JPanel plEtudiant = new PanelListeEtudiant();
	JPanel plEnseignant = new PanelListeEnseignant();
 
	JPanel pListes = new JPanel();
	pListes.setLayout(new CardLayout());
	pListes.add(plEtudiant,ETUDIANT);
	pListes.add(plEnseignant,ENSEIGNANT);
        }
 
	public void actionPerformed(ActionEvent e){
		if(e.getSource().equals(btnEnseignant)){
			CardLayout cl = (CardLayout)(pListes.getLayout());
			cl.show(pListes,ENSEIGNANT);
		}
 
		if(e.getSource().equals(btnEtudiant)){
			CardLayout cl = (CardLayout)(pListes.getLayout());
			cl.show(pListes,ETUDIANT);
		}
	}
}
Les panel que gère le CardLayout ressemblent à ça :
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
 
public class PanelListeEtudiant extends JPanel{
 
	private Choice cFormation;
	private Choice cGroupe;
	private Choice cEtudiant;
 
	public PanelListeEtudiant(){
		super();
		cFormation = new Choice();
		cGroupe = new Choice();
		cEtudiant = new Choice();
 
		this.setLayout(new GridLayout(3, 2));
 
		cFormation.add(...);//je remplis mes 3 listes
 
		this.add(new JLabel("Formation : "));
		this.add(cFormation);
		this.add(new JLabel("Groupe : "));
		this.add(cGroupe);
		this.add(new JLabel("Etudiant : "));
		this.add(cEtudiant);
	}
}
Quand je change le panel affiché dans le CardLayout, le panel changent bien, mais il contient uniquement les JLabel (formation, groupe etc.) mais les liste déroulantes (les Choice) ont "disparu".
Je ne comprends pas où est mon erreur, si quelqu'un à des lumières à m'apporter je suis preneur !

Merci d'avance


EDIT
Résolu: il suffit de changer les Choice (qui sont des composants AWT) par des JComboBox, et ça fonctionne.