Bonjour à tous,
J'ai un JTree qui va me servir de menu et je voudrai ajouter un écouteur sur chaque noeud qui ouvrira une InternalFrame dans ma frame principal. J'ai trouvé la méthode TreeSelectionListener et j'arrive bien à affecter une action à chacun des élements mais je trouve mon code un peu "sale" dans la mesure où j'identifie le nooeud selectionnée par rapport à son contenu (beurk). Je voudrai si on peut affecter une action ou un objet dès la création de l'arbre. Je débute en java alors j'ai encore un peu de mal à être vraiment efficace dans mon développement.
Un petit bout de code pour illustrer :
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 public class tree extends JPanel{ JTree arbre; JPanel panel_menu=new JPanel(); //public static InternalFramePays Pays=new InternalFramePays(); //Constructeur public tree(){ DefaultMutableTreeNode rootNode=new DefaultMutableTreeNode("MaRacine"); //Partie administration DefaultMutableTreeNode childNode=new DefaultMutableTreeNode("Administration"); rootNode.add(childNode); DefaultMutableTreeNode childNode2=new DefaultMutableTreeNode("Pays/Entités"); childNode.add(childNode2); //childNode2.setUserObject(new JInternalFrame(Pays) ); childNode2=new DefaultMutableTreeNode("Piste d'audit"); childNode.add(childNode2); childNode2=new DefaultMutableTreeNode("Sécurités"); childNode.add(childNode2); //Etc... arbre=new JTree(rootNode); //expension en 1 click arbre.setToggleClickCount(1); arbre.setVisible(true); //On masque le noeud racine (inutile) arbre.setRootVisible(false); arbre.addTreeSelectionListener(new TreeSelectionListener(){ public void valueChanged(TreeSelectionEvent t){ TreePath chemin=arbre.getSelectionPath(); String menu=""+chemin; String selectedNode=""+(DefaultMutableTreeNode)chemin.getLastPathComponent(); //C'est la que c'est moche!!!!!!!!!! if (selectedNode.equals("Pays/Entités")){ InternalFramePays(); } if (selectedNode.equals("Piste d'audit")){ InternalFrameAudit(); } //Idem pour chaque autre noeud } }); panel_menu.setBackground(Color.white); panel_menu.add(arbre); panel_menu.setBounds(new Rectangle(0,0,30,200)); this.add(panel_menu); } //Ouvre les InternalFrame dans le DesktopPane de la frame principal void InternalFramePays(){ InternalFramePays I=new InternalFramePays (); //On les ajoute au desktopPane test_menu.dp.add(I); } void InternalFrameAudit(){ JInternalFrame internalFrame = new JInternalFrame() ; internalFrame.setTitle("Piste d'audit"); internalFrame.setSize(new Dimension(200,200)) ; internalFrame.setVisible(true) ; internalFrame.setClosable(true); internalFrame.setMaximizable(true); internalFrame.setIconifiable(true); internalFrame.setResizable(true); //On les ajoute au desktopPane test_menu.dp.add(internalFrame); } //Etc..... }
Voila j'espere avoir été clair dans mon explication. Autrement dit je voudrai dès la création de mon arbre dire :" Pour le noeud pays j'affecte telle fonction ou tel object que je récupere lors du clic, etc...", un genre de champ caché en fait.
Ma question est de savoir aussi si le jeux en vaut vraiment la chandelle, si c'est pour passer une semaine de dev sur la propreté du code...
Si vous avez des remarques , des suggestion, je suis tout ouie!
Merci d'avance
Partager