JTree récursif

gambi01 Messages postés 12 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 20 novembre 2007 - 28 mai 2007 à 15:41
gambi01 Messages postés 12 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 20 novembre 2007 - 28 mai 2007 à 21:43
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

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
28 mai 2007 à 16:47
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
0
gambi01 Messages postés 12 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 20 novembre 2007
28 mai 2007 à 21:43
Merci, j'essaye dés que possible.
0