Bonjour,
Je travaille actuellement sur un projet lié à l'api JAXB.
But : créé un editeur XML basé sur JAXB et Jtree.
Explication :
En utilisant JAXB sur un shema XML, je génére
des classes représentant les éléments du document XML. A partir de ces
classes je cré un DefaultTreeModel (à partir d'un noeud racine auquel
je rajoute les autres éléments).
Jusqu'ici il n'y a pas de probleme,le JTree s'affiche correctement et
j'ai créé des method pour ajouter et supprimer des noeud.
Voici le Document XML :
Voici le probléme :
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 <bibliotheque> <livre> <titre>titre 1</titre> <auteur>auteur 1</auteur> <editeur>editeur 1</editeur> </livre> <livre> <titre>titre 2</titre> <auteur>auteur 2</auteur> <editeur>editeur 2</editeur> </livre> <livre> <titre>titre 3</titre> <auteur>auteur 3</auteur> <editeur>editeur 3</editeur> </livre> </bibliotheque>
Je veut créer une fonction de recherche qui prend en argument un String
(TextField) et qui recherche les noeuds correspendant.
La methode utilisé :
J'ai une methode parseJTree qui parcours le JTree et me renvoie une list des TreePath et une liste des Leaf.
Code :
Je fais l'appel de cett fonction dans un ActionPerformed :
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 private List paths =new ArrayList(); private List values =new ArrayList(); private void parseJTree(JTree tree, TreePath parent,int depth) { TreeNode node = (TreeNode)parent.getLastPathComponent(); if (node.getChildCount() >= 0) { for (Enumeration e=node.children(); e.hasMoreElements(); ) { DefaultMutableTreeNode n = (DefaultMutableTreeNode)e.nextElement(); TreePath path = parent.pathByAddingChild(n); int leafCount=n.getLeafCount(); if(n.isLeaf()==false) { paths.add(path); } if(n.getLeafCount()==1 && paths.indexOf(path)!=-1) { values.add(paths.indexOf(path)+n.getFirstLeaf().toString()); } parseJTree(tree, path,depth+1); } } }
Quand j'appuis sur le boutton GO j'ai ces erreurs :
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 GO = new javax.swing.AbstractAction("GO") { public void actionPerformed(ActionEvent evt) { String tr = value.getText(); TreeNode root = (TreeNode)tree.getModel().getRoot(); //Ajout du root au debut de la liste de path paths.add(new TreePath(root)); parseJTree(tree, new TreePath(root),0); //par exemple le path 3 TreePath tp = new TreePath(paths.get(3)); System.out.println(tp); tree.setSelectionPath(tp); } };
Et quand j'utilise ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 [[bibliotheque, livre : 0, Auteur]] java.lang.ClassCastException at test.valueChanged(test.java:205) at javax.swing.JTree.fireValueChanged(JTree.java:2406) at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:277 7)
Ce code me selectionne le bon élément.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Object[] p = new Object[2]; p[0] = tree.getModel().getRoot(); p[1] = tree.getModel().getChild(tree.getModel().getRoot(),1); TreePath tp = new TreePath(p); System.out.println(tp); tree.setSelectionPath(tp);
Si Quelque peut m'aider en trouvant ce qui cloche avec mon code ,ou en
me donnant une autre methode pour selectionner un noeud en passant par
un boutton.(veuillez prendre en compte que l'on recherche tous les éléments correspendant au string saisi)
merci d'avance.
Partager