IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTree : recherche et sélection de noeud


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Points : 10
    Points
    10
    Par défaut JTree : recherche et sélection de noeud
    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 :
    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>
    Voici le probléme :
    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 :

    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);
    	   }
    	}
        }
    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
    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);
      }
    };
    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
     
    [[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)
    Et quand j'utilise ça :
    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);
    Ce code me selectionne le bon élément.

    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.

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,
    à quelle ligne corespond l'erreur (test.java:205) ?

    J'ai l'impression que lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreePath tp = new TreePath(paths.get(3));
    Tu veux en fait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreePath tp = (TreePath) paths.get(3);
    Mais je ne peux pas dire si l'erreur vient de là tant que je ne sais pas à quelle ligne est lancée l'exception.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/12/2005, 12h30
  2. [débutant] [JTree] Comprendre une sélection
    Par calogerogigante dans le forum Composants
    Réponses: 4
    Dernier message: 26/10/2005, 15h34
  3. [JTree] Faire apparaître visuellement le noeud sélectionné
    Par Bobsinglar dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2005, 16h26
  4. [JTree] Suppresion de tous les noeuds sauf la racine
    Par nicolaskarp dans le forum Composants
    Réponses: 3
    Dernier message: 29/04/2005, 12h53
  5. [JTree] Couleur du texte des noeuds
    Par seawolfm dans le forum Composants
    Réponses: 2
    Dernier message: 17/04/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo