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] Récupération des parents


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut [JTree] Récupération des parents
    Bonjour,

    J'ai pour projet de créer un JTree qui implémente le Drag and Drop (je me suis inspiré de ce tuto : http://forum.java.sun.com/thread.jsp...hreadID=296255). Cependant, le problème que je rencontre actuellement est qu'il faudrait que lorsque que je drop un objet, il récupère l'arborescence compléte des parents (suis-je bien clair ).
    Admettons une arborescence comme celle-ci :
    • Node1
      • Node11
      • Node12
      • Node13
    • Node2
      • Node21
        • Node211
          • Node2111
          • Node2112
        • Node212
      • Node22


    Si je souhaite Drag and Drop le noeud 'Node2112', le résultat devra être le suivant :

    • Node2
      • Node21
        • Node211
          • Node2112


    J'ai essayé plusieur méthodes, notament avec des appels récursifs à 'getParent()' mais rien y fait, je me retrouve toujours avec des bugs et exceptions

    J'espère avoir été clair, si vous avez des questions n'hésitez pas.

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Salut,

    Je n'est pas super bien compris ta descritpion en fait tu souhaite drag and dropper le noeud 2112 a quel emplacement ? Juste avant le noeud 2111 ?

    ++

  3. #3
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Tu souhaites retrouver le chemin absolu de ton noeud c'est ça?
    Tu peux modifier ce code
    pour retrouver le chemin absolu de ton noeud.
    J'espère que j'ai compris ta question...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DefaultTreeModel treeModel = (DefaultTreeModel) tonArbre.getModel() ;
    TreeNode[] chemin = treeModel.getPathToRoot(tonNoeud_2112);
    c est le 'chemin' que tu dois "dragger"

    mais j ai pas testé ...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut
    guis14 --> En fait, je veux 'dragger' le noeud dans un autre JTree.

    dahtah --> Le problème n'est pa de retrouver le chemin absolu, puisqu'on peut utiliser 'getPath()', mais de le 'dragger'.

    fouxy --> ta solution permet de récupérer le chemin du noeud à la racine, or le problème est qu'il faut refaire un nouveau noeud avec le chemin complet mais avec seulement le 'fils' concerné.....

    Pour essayer d'être plus clair, lorsque je 'drag' le noeud 'Node2112', il faut que j'arive à faire une copie de son arborescence pour pouvoir l'ajouter à un autre arbre au moment du 'drop', la copie devra contenir aucun des autres fils de chaque noeud que celui concerner par le 'drag'.

    Merci de votre aide et votre rapidité, j'espère que vous me comprenez un peu mieux maintenant

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    tu veux dire que le getPathToRoot() ne recupere que le chemin, sans le dernier noeud fils, ici le 2112 (si j ai bien compris),
    il suffit donc que tu rajjoute une copie de ce noeud dans le tableau de noeud, a priori en debut de tableau ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut
    Non, cela n'est pas un problème, ce qui est génant c'est que ca me retourne un tableau (TreePath[]), et donc à partir de là je vois pas comment recréer le noeud à partir du TreePath[].

    Voilà ce que j'ai fait, ça fonctionne pour le parent direct mais pas jusqu'à la racine :

    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
    public DefaultMutableTreeNode getParents(DefaultMutableTreeNode node) {		
    		TreeNode[] nodePath = (TreeNode[])node.getPath(); // Création du tableau de 'path' (premier élément = racine, dernier = noeud 'dragger')
    		DefaultMutableTreeNode copy = new DefaultMutableTreeNode();
    		int nbParent = nodePath.length;
     
    		if(nodePath.length > 2) {     // Si c'est la racine ou un dossier directement attaché à la racine, on ne fait rien
    			copy = new DefaultMutableTreeNode(((DefaultMutableTreeNode)nodePath[nbParent-1]).getUserObject()); // On commence par le noeud le plus 'bas'
    			for(int i = nbParent-2; i < 1; i--) {  // Parcours du tableau à l'envers
    				DefaultMutableTreeNode copyTmp = new DefaultMutableTreeNode(((DefaultMutableTreeNode)nodePath[i]).getUserObject()); // Récupèration d'un noeud 'au dessus'
    				copyTmp.add(copy);   // Rattachement de l'ancien noeud au nouveau
    				copy = copyTmp; // copie du noeud avec son sous noeud (que l'on viens d'ajouter)
    			}
    		}
    		return copy;
    	}
    C'est pas terrible comme code, mais j'essaie plusieur chose en même temps donc c'est un peu le 'bordel'

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    getPathToRoot(tonNoeud) renvoit un TreeNode[] ..., et non un TreePath[]
    si je ne me trompe.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut
    Tu as tout à fait raisond, sauf que le problème est que je vais devoir itérer sur le tableau de noeud, récupérer les noeud, supprimer les enfants, ratacher le noeud que je veux et reboucler......

    Entre temps j'ai réussi à faire ce que je voulais, mais il me reste quelque petit problème (gestion des doubles.....) et il y a aussi que je ne sais pas vraiment où mettre cette fonction (dans une classe Utils, ou peut être faire ma propre implémentation de DefaultMutableTreeNode....)

    Pour info voilà mon code (toujours aussi bordélique ^^)

    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
    	public DefaultMutableTreeNode getParents(DefaultMutableTreeNode node) {		
    		TreeNode[] nodePath = (TreeNode[])node.getPath();  // Création du tableau de 'path' (premier élément = racine, dernier = noeud 'dragger')
    		DefaultMutableTreeNode copy = node;
    		int nbParent = nodePath.length;
     
    		if(nodePath.length > 1) {  // Si c'est la racine ou un dossier directement attaché à la racine, on ne fait rien
    			copy = new DefaultMutableTreeNode(((DefaultMutableTreeNode)nodePath[nbParent-1]).getUserObject(), false);  // On commence par le noeud le plus 'bas'
    			for(int i = nbParent-2; i > 0; i--) {  // Parcours du tableau à l'envers
    				DefaultMutableTreeNode copyTmp = new DefaultMutableTreeNode(((DefaultMutableTreeNode)nodePath[i]).getUserObject());   // Récupèration d'un noeud 'au dessus' 
    				copyTmp.add(copy);  // Rattachement de l'ancien noeud au nouveau
    				copy = copyTmp;  // copie du noeud avec son sous noeud (que l'on viens d'ajouter)
    			}
    		}
    		return copy;
    	}

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/08/2014, 13h09
  2. Récupération des nœuds d’un JTree
    Par heni86_2003 dans le forum Composants
    Réponses: 2
    Dernier message: 18/08/2010, 15h01
  3. [XSL] Récupération des attributs parents
    Par M_saun dans le forum XSL/XSLT/XPATH
    Réponses: 22
    Dernier message: 20/07/2010, 17h24
  4. Réponses: 1
    Dernier message: 26/11/2008, 03h15
  5. [DOM] Récupération des n%u0153uds fils d'un n%u0153ud parent
    Par Alabama-song dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/06/2008, 19h29

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