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érer tous les noeuds


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut [JTree] Récupérer tous les noeuds
    Bonjour, je souhaite récupérer tous les nœuds de mon JTree (1 par 1 ou dans un tableau si possible) car je dois générer un fichier qui comportera une ligne pour chacun des nœuds. Pour illustrer mes propos qui ne sont peut-être pas très clairs, voilà un exemple: j'ai un JTree avec un enfant "prince" un autre enfant "princesse" et un parent "roi" et je dois pouvoir les lister pour générer un fichier texte ou il y aura une ligne "il y a un prince" une autre ligne "il y a une princesse" et un autre ligne "il y a un roi" tout en sachant qui est le parent et qui sont les enfant. La génération du fichier n'est pas un problème mais je ne sait pas comment faire un listage des nœuds.

    J'éspère avoir été assez clair

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Voici un exemple permettant de mettre tous les noeuds d'un arbre dans une list.

    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
    63
    64
    	/**
             * Return a list of all nodes found in the tree.
             * All nodes should be of {@link TreeNode} type or
             * there will be a {@link ClassCastException}.
             *
             * @param tree The tree.
             * @return The list of {@link TreeNode}.
             */
    	public static List<TreeNode> getAllNodes(JTree tree) {
    		List<TreeNode> nodes = new ArrayList<TreeNode>();
    		TreeNode root = (TreeNode) tree.getModel().getRoot();
    		nodes.add(root);
    		appendAllChildrenToList(nodes, root, true);
    		return nodes;
    	}
     
    	/**
             * Return a list of all nodes that are child, grand-child, etc...
             * of the given {@link TreeNode}.
             * All nodes should be of {@link TreeNode} type or
             * there will be a {@link ClassCastException}.
             *
             * @param node The parent node.
             * @return The list of {@link TreeNode}.
             */
    	public static List<TreeNode> getAllNodes(TreeNode node) {
    		return getAllNodes(node, true);
    	}
     
    	/**
             * Return a list of all nodes that are child, grand-child, etc...
             * of the given {@link TreeNode}.
             * All nodes should be of {@link TreeNode} type or
             * there will be a {@link ClassCastException}.
             *
             * @param node The parent node.
             * @param getChildChildren <code>true</code> if children of each child should be taken too.
             * @return The list of {@link TreeNode}.
             */
    	public static List<TreeNode> getAllNodes(TreeNode node, boolean getChildChildren) {
    		List<TreeNode> nodes = new ArrayList<TreeNode>();
    		appendAllChildrenToList(nodes, node, getChildChildren);
    		return nodes;
    	}
     
    	/**
             * Append all children of <code>parent</code> to the <code>nodes</code> list.
             *
             * @param nodes The list to append on.
             * @param parent The parent node.
             * @param getChildChildren <code>true</code> if children of each child should be taken too.
             */
    	private static void appendAllChildrenToList(List<TreeNode> nodes, TreeNode parent, boolean getChildChildren) {
    		Enumeration children = parent.children();
    		if (children != null) {
    			while (children.hasMoreElements()) {
    				TreeNode node = (TreeNode) children.nextElement();
    				nodes.add(node);
    				if (getChildChildren) {
    					appendAllChildrenToList(nodes, node, getChildChildren);
    				}
    			}
    		}
    	}
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    Merci pour ton exemple natha, malheureusement je n'y comprend pas grand chose...

    De plus, je dois écrire des lignes de texte en fonction des nœuds présents et non faire un liste brute des nœuds.

    Dans mon programme, mon JTree représente l'arborescence d'une scène 3D (donc avec des TransformGroup, des Objets, etc...) et je dois générer le fichier Universe.java de la scène par rapport à cet arbre. Pour le moment, lorsque je génère le fichier Universe.java, j'ai déjà tout le code de base d'un univers 3D à l'intérieur mais il me faut maintenant intégré les différents objets présents dans mon arbre au milieu de celui ci, et dans le bon ordre et c'est là le principal problème. Dans un scène 3D, les TransformGroup peuvent avoir autant d'enfant qu'ils veulent et les objet n'en auront aucun et auront des TransformGroup en tant que parent. Mon problème est donc le faite d'écrire ces lignes dans le bon ordre, tout en intégrant les bon objets à l'intérieur des bon TransformGroup etc...!

    C'est assez difficile de résumé comme sa si vous avec des questions de compréhension n'hésitez pas.

    merci d'avance

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par DamS2502 Voir le message
    malheureusement je n'y comprend pas grand chose...
    Oh allé, si tu sais faire un arbre JTree, il faut vraiment un mini-effort pour comprendre ce code, somme toute assez simple.

    Au delà de ça, ton problème est plus un problème de logique qu'un problème Java. Il faut que tu fasses des essais toi même. Que tu mettes en "français" les étapes de ton algo, que tu codes, que tu testes, et éventuellement que tu reviennes ici avec plus de "matière".
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    Oh allé, si tu sais me donner une réponse du genre, il faut vraiment un mini-effort pour m'aider un peu, c'est somme toute assez simple.

    Ne penses tu pas qu'au moment où je viens poster sur ce forum j'ai déjà fait des essais et que mon niveau en java (ou en logique) n'est pas suffisamment élevé pour répondre seul à ces question. Sinon je l'aurais fait!

    mais merci quand même

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par DamS2502 Voir le message
    il faut vraiment un mini-effort pour m'aider un peu, c'est somme toute assez simple.
    Ah ben si tu dis que c'est simple, pourquoi tu demandes ?

    Essaie de comprendre le code que je t'ai fourni, il parcours l'arbre pour mettre tous les noeuds et leurs enfants dans l'ordre de lecture. Il faut adapter à ton besoin.
    Ce n'est pas le but ici de fournir un code tout fait.

    Fait du code et montre où tu coinces en postant ce code approprié.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

Discussions similaires

  1. Récupérer tous les noeuds du même type
    Par suiX- dans le forum Débuter
    Réponses: 0
    Dernier message: 30/05/2013, 16h54
  2. récupérer tous les noeuds du DOM
    Par crocodile dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2009, 09h08
  3. Réponses: 0
    Dernier message: 25/11/2008, 13h58
  4. [JTree] rafraichir noeud sans minimiser tous les noeuds
    Par jdewalqu dans le forum Composants
    Réponses: 6
    Dernier message: 05/07/2006, 08h58
  5. [JTree] Suppresion de tous les noeuds sauf la racine
    Par nicolaskarp dans le forum Composants
    Réponses: 3
    Dernier message: 29/04/2005, 12h53

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