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);
    }
}
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;
	}
 
}
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.

Merci de votre aide (c'est la première fois que je manipule ce composant avec Java/Swing).