Bonjour,
Je travaille actuellement sur une petite appli avec JTree. L'arbre contient 4 nodes (fournisseur, client, produit et catégorie). J'ai également 4 Jpanel dans des classes différentes (PanelFournisseur, PanelClient, PanelProduit et PanelCategorie). Mon idée est d'afficher le panel respectif quand je clique sur un noeud. Par ex: si je clique sur le noeud "client", c'est "PanelClient" qui sera affiché. J'ai donc procédé comme suit :
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
 
private JTree jTree;
private DefaultMutableTreeNode fournisseur;
private DefaultMutableTreeNode client;
private DefaultMutableTreeNode libelle;
private DefaultMutableTreeNode cat;
...
 
public class JTreeS extends JSplitPane implements TreeSelectionListener{
...
jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jTree.addTreeSelectionListener(this);
 
...
public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
        if (node == null){
            return;
        }
        node.getUserObject();
        if (!node.isLeaf()){
            if (node.equals(client)) {
                PanelClient pc = new PanelClient();
                pc.setVisible(true);
                this.setRightComponent(pc);
                this.setDividerLocation(300);
                System.out.println("Classe PanelClient chargée");
            } else if (node.equals(fournisseur)) {
                PanelFournisseur pf = new PanelFournisseur();
                pf.setVisible(true);
                this.setRightComponent(pf);
                this.setDividerLocation(300);
                System.out.println("Classe PanelFournisseur chargée");
            } else if (node.equals(cat)) {
                PanelCategorie pc = new PanelCategorie();
                pc.setVisible(true);
                this.setRightComponent(pc);
                this.setDividerLocation(300);
                System.out.println("Classe PanelCategorie chargée");
            } else if (node.equals(libelle)){
                PanelProduit pp = new PanelProduit();
                pp.setVisible(true);
                this.setRightComponent(pp);
                this.setDividerLocation(300);
                System.out.println("Classe PanelProduit chargée");
            }                
        }//fin if (!node.isLeaf())
    }//fin méthode valueChanged(TreeSelectionEvent e)
}//fin classe
J'arrive à afficher les panels en fonction du nœud cliqué mais j'ai le sentiment que ça ressemble plutôt à du "bidouillage". J'aimerais donc savoir s'il existe d'autres moyens, disons plus "pro".
autre question: Vu le code ci-dessus, que devient le panel précédant quand j'affiche un nouveau? Le 1e est supprimé (enlevé) ou simplement le 2e est affiché par dessus le 1e?
Merci d'avance de vos impressions/réponses.