Bonjour à tous,
Cela fait deux jours que je m'arrache les cheveux en voulant construire un JTree avec un modèle perso.
Voici le code:
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 /** * Cette classe correspond au JTree proprement dit. */ public class MonJTree extends JTree { private MonModele model; private DefaultMutableTreeNode root = new DefaultMutableTreeNode("Racine"); public MonJTree() { this.root.add(new TopLevelElem()); this.model = new MonModele(this.root); this.setModel(this.model); this.setRootVisible(false); } }
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 /** * Là, c'est le modèle du JTree */ public class MonModele implements TreeModel { private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>(); private DefaultMutableTreeNode root; public MonModele(DefaultMutableTreeNode root) { this.root = root; } public void addTreeModelListener(TreeModelListener l) { treeModelListeners.addElement(l); } public Object getChild(Object parent, int index) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent; return node.getChildAt(index); } public int getChildCount(Object parent) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent; return node.getChildCount(); } public int getIndexOfChild(Object parent, Object child) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent; return node.getIndex((DefaultMutableTreeNode) parent); } public Object getRoot() { return this.root; } public boolean isLeaf(Object node) { return ((DefaultMutableTreeNode) node).isLeaf(); } public void removeTreeModelListener(TreeModelListener l) { treeModelListeners.removeElement(l); } public void valueForPathChanged(TreePath path, Object newValue) { System.out.println("*** valueForPathChanged : " + path + " --> " + newValue); } }Quand j'exécute le code, seul le nom de l'élément de premier niveau apparaît, et pas ses sous-éléments. Cependant, si je supprime le ligne " this.setRootVisible(false); " dans le constructeur du JTree, les sous-éléments apparaissent, mais avec l'élément racine (forcément) que j'aimerais cacher.
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 /** * Et voilà enfin un élément "de premier niveau", qui vient juste après la racine. * (il n'est pas destiné à avoir un nombre de sous-éléments qui change) */ public class TopLevelItem extends DefaultMutableTreeNode { private MutableTreeNode subitem1 = new DefaultMutableTreeNode("Elem 1"); private MutableTreeNode subitem2 = new DefaultMutableTreeNode("Elem 2"); private MutableTreeNode subitem3 = new DefaultMutableTreeNode("Elem 3"); private MutableTreeNode subitem4 = new DefaultMutableTreeNode("Elem 4"); public SongReaperItem() { super("Top Level Item"); this.add(this.subitem1); this.add(this.subitem2); this.add(this.subitem3); this.add(this.subitem4); } @Override public boolean isLeaf() { return false; } }
Merci de votre aide (c'est la première fois que je manipule ce composant avec Java/Swing).
Partager