Bonjour,
J'ai créé un Node personnalisé pour résoudre le probleme de node sans enfant qui s'affiche dans le JTree comme un fichier et non un dossier :
et je veux afficher un fichier XML dans un JTree avec comme propriété :
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 import javax.swing.tree.DefaultMutableTreeNode; public class MyNode extends DefaultMutableTreeNode { private boolean isFolder=true; // folder or not ? MyNode(String s,boolean isFolder) { super(s); this.isFolder=isFolder; } MyNode(String s) { super(s); } public boolean isLeaf() { return !isFolder; } }
- Si le noeud XML a des enfants, alors c'est un dossier
- Si le noeud n'a pas d'enfants mais qu'il n'a pas de texte entre ses balises (comme <noeud></noeud> ou <noeud/>), alors c'est un dossier
- si le noeud n'a pas d'enfant mais qu'il a un texte entre ses balises (comme <Noeud>Texte</Noeud>) alors c'est un Fichier
et voici la classe que j'ai faite pour générer mon arbre :
Lorsque j'affiche cet arbre, le root est bien affiché comme un dossier, mais impossible de le déplier pour voire ses enfants.
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 import javax.swing.*; import javax.swing.tree.*; import org.jdom.*; import java.util.Iterator; public class XMLTree extends JTree { static MyNode root=new MyNode("Base"); XMLTree(XMLManager xmlm) { //super(); super(root); //this.root=root; init(xmlm); } private void init(XMLManager xmlm) { setName("BDD"); //setRootVisible(false); processElement(xmlm.getRoot(),root); } private void processElement(Element el, MyNode dmtn) { if(el.getChildren().size()==0) // fichier ou dossier sans enfants { if(el.getTextNormalize().equals("")) { //gérer pour mettre un dossier MyNode currentNode = new MyNode(el.getName(),true); dmtn.add(currentNode); } else { String text=""+el.getName()+" : "+el.getTextNormalize(); MyNode currentNode = new MyNode(text,false); dmtn.add(currentNode); } } else // dossier avec enfants { MyNode currentNode = new MyNode(el.getName(),true); String text = el.getTextNormalize(); /*if((text != null) && (!text.equals(""))) currentNode.add(new MyNode(text));*/ //processAttributes(el, currentNode); Iterator children = el.getChildren().iterator(); while(children.hasNext()) processElement((Element)children.next(), currentNode); dmtn.add(currentNode); } } }
Le même code en remplacant les MyNode par des DefaultMutableTreeNode fonctionne sauf pour les dossiers vides qui sont affichés comme des fichiers (normal).
Alors, je me creuse la tête depuis quelques heures maintenant, et je ne trouve vraiment pas où j'ai faux.
Quelqu'un peut m'aiguiller sur l'erreur que j'ai faite ?
Merci d'avance
F.
Partager