Problème avec la mise en place d'un JTree
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:
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:
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:
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).