JTree récursif

Signaler
Messages postés
12
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
20 novembre 2007
-
Messages postés
12
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour,

J'ai un soucis pour remplir un JTree de façon récursive.
J'ai un tableau de 3 colonnes (index - libellé - index parent)
Exemple :
1, "Racine", 0
2, "Root1", 1
3, "Root1_1", 2
4, "Root1_2", 2
5, "Root1_2_1", 4
6, "Root1_2_2", 4
7, "Root1_2_2_1", 6
8, "Root1_3", 2
9, "Root3", 1

Voici un squelette de la fonction récursive que j'utilise.

    private String[][] m_TreeRoot =    {
                                        {"1", "racine", "0"},
                                        {"2", "Root1", "1"},
                                        {"3", "Root1_1", "2"},
                                        {"4", "Root2", "1"},
                                        {"5", "Root2_1", "4"},
                                        {"6", "Root2_2", "4"},
                                        {"7", "Root2_2_1", "6"},
                                        {"8", "Root2_2_2", "6"},
                                        {"9", "Root2_3", "4"},
                                        {"10", "Root3", "1"}
                                    };

    private JTree m_Tree;
    private DefaultMutableTreeNode MyRacine;

    public void ParcoursTableau(String [][] argTableau, int argi) {

        if (argi == argTableau.length)
            System.exit(1);
        for (int i = argi; i < argTableau.length; ++i) {
            for (int j = 0; j < argTableau.length; ++j) {
                if (argi == 0){
                    System.out.println("Racine : " + argTableau[i][1]);
                    DefaultMutableTreeNode MyRacine = new DefaultMutableTreeNode(argTableau[i][1], true);
                    m_Tree = new JTree(MyRacine);
                }
                else if (argTableau[i][2] == "1"){
                    DefaultMutableTreeNode MyRoot = new DefaultMutableTreeNode(argTableau[i][1], true);
                    MyRacine.add(MyRoot);   // Marche pas
                    System.out.println("Parent = Racine " + " Feuille : " + argTableau[i][1]);
                }
                else
                    System.out.println(" Feuille : " + argTableau[i][1]);
                ParcoursTableau(argTableau, i + 1);
            } // for (int j = 0; j < argTableau.length; ++j)
        } // Fin for (int i = argi; i < argTableau.length; ++i)
    } // Fin ParcoursTableau()

L'appel ce fait par :
ParcoursTableau(m_TreeRoot, 0);
// reste du code (SetSize - JScrollPane - getContentPane ....)

L'algorithme fonctionne bien, mais quand je remplace les "System.out" par l'utilisation de "DefaultMutableTreeNode", ça ne s'affiche pas.
En ne gardant que le if, j'arrive bien à afficher la racine.

Merci de vos réponses.

2 réponses

Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

tu peux t'inspirer de ça :

public static DefaultMutableTreeNode objects(Object[] objs) {
    DefaultMutableTreeNode node = new DefaultMutableTreeNode();
    node = (DefaultMutableTreeNode)objs[0];
    DefaultMutableTreeNode child;
    for (int i = 1; i < objs.length; i++) {
        Object specifier = objs[i];
        if (specifier instanceof Object[])
            child = objects((Object[]) specifier);
        else{
            child = new DefaultMutableTreeNode();
            child = (DefaultMutableTreeNode)specifier;
        }
        node.add(child);
    }
    node.trimToSize();
    return node;
}

Note : Les lignes en rouge sont super importante si tu veux séraliser/déserialiser ton DefaultMutableTreeNode elle permet d'éviter l'exception StackOverflowException

ici le tableau passé en parametre contient un nouveau tableau pour un nouveau noeur etc ... mais tu peux faculement faire la meme chose avec un list d'objets

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
12
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
20 novembre 2007

Merci, j'essaye dés que possible.