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 Problème de modèle ?


Sujet :

Composants Java

  1. #1
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut Jtree Problème de modèle ?
    Bonjour à tous,

    Alors voila mon problème, j'ai un JTree que j'ai crée avec une classe implémentant TreeModel et des noeuds qui extends DefaultMutableTreeNode. Mon arbre s'affiche correctement, le seul petit problème c'est que les "traits" qui relient les pères et fils ne s'affichent pas tous. Je pense à un problème dans le model mais je n'en suis pas sûr. Je pourrais les enlever complètement puisque mon arbre s'affiche correctement mais dans la suite de mon programme, j'utilise la fonction getPath() et scrollPathToVisible() su mon Jtree et elle ne fonctionne pas correctement ce qui renforme ma pensée qu'il y a un problème de lien père/fils qui viendrait du model.

    Merci de votre aide.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    bonjour,
    peux-tu montrer le code de ton TreeModel pour y voir plus clair ? Puisque tu utilises des DefautMutableTreeNode, pourquoi ne pas avoir utilisé DefaultTreeModel ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Hum... on dirait plutôt un problème de rafraichissement au vu de ce que tu nous dit, mais ça reste purement une hypothèse...(t'aurais pas une boucle infinie qq part par hasard?)
    Est-ce que tu as essayé un appel explicite du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setShowsRootHandles(true);
    updateUI();
    et essaie de nous dire en quoi les appels à getPath() et scrollPathToVisible() ne fonctionnent pas vraiment...Est-ce que getPath() empêche scrollPathToVisible() de fonctionner ou est-ce seulement scrollPathToVisible() qui ne fonctionne pas ?
    Bref, va falloir se mettre en mode DEBUG

  4. #4
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Merci, tout d'abord voici mon Model :
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    package org.scn.graphics.manufactorders.planning.horizontal;
     
    import java.util.Vector;
     
    import javax.swing.event.TreeModelListener;
    import javax.swing.tree.TreeModel;
    import javax.swing.tree.TreePath;
     
    public class OrdersTreeModel implements TreeModel {
     
        private Vector orders;
     
        private RootNode rootPart;
     
        public OrdersTreeModel(Vector v) {
     
            orders = v;
            rootPart = new RootNode("Liste des Références");
            rootPart.addChildren(orders);
        }
     
        public void addTreeModelListener(TreeModelListener arg0) {
        }
     
        public Object getChild(Object obj, int index) {
     
            try {
                RootNode node = (RootNode) obj;
                return node.getChildAt(index);
            } catch (ClassCastException e) {
                try {
                    PartNode_New node = (PartNode_New) obj;
                    return node.getChildAt(index);
                } catch (ClassCastException e2) {
                    try {
                        OrderDataNode node = (OrderDataNode) obj;
                        return node.getChildAt(index);
                    } catch (ClassCastException e3) {
                        try {
                            OrderStepNode node = (OrderStepNode) obj;
                            return node.getChildAt(index);
                        } catch (ClassCastException e4) {
                            try {
                                ToolNode node = (ToolNode) obj;
                                return node.getChildAt(index);
                            } catch (ClassCastException e5) {
                                System.out
                                        .println("ERREUR : Arbre des référence, problème de cast dans getChild de OrdersTreeModel_New");
                                e5.printStackTrace();
                            }
                            e4.printStackTrace();
                        }
                        e3.printStackTrace();
                    }
                    e2.printStackTrace();
                }
                e.printStackTrace();
            }
            return null;
        }
     
        public int getChildCount(Object obj) {
     
            try {
                RootNode node = (RootNode) obj;
                return node.getChildCount();
            } catch (ClassCastException e) {
                try {
                    PartNode_New node = (PartNode_New) obj;
                    return node.getChildCount();
                } catch (ClassCastException e2) {
                    try {
                        OrderDataNode node = (OrderDataNode) obj;
                        return node.getChildCount();
                    } catch (ClassCastException e3) {
                        try {
                            OrderStepNode node = (OrderStepNode) obj;
                            return node.getChildCount();
                        } catch (ClassCastException e4) {
                            try {
                                ToolNode node = (ToolNode) obj;
                                return node.getChildCount();
                            } catch (ClassCastException e5) {
                                System.out
                                        .println("ERREUR : Arbre des référence, problème de cast dans getChildCount de OrdersTreeModel_New");
                                e5.printStackTrace();
                            }
                            e4.printStackTrace();
                        }
                        e3.printStackTrace();
                    }
                    e2.printStackTrace();
                }
                e.printStackTrace();
            }
            return 0;
        }
     
        public int getIndexOfChild(Object arg0, Object arg1) {
            return 0;
        }
     
        public Object getRoot() {
     
            return rootPart;
        }
     
        public boolean isLeaf(Object obj) {
            try {
                RootNode node = (RootNode) obj;
                return node.isLeaf();
            } catch (ClassCastException e) {
                try {
                    PartNode_New node = (PartNode_New) obj;
                    return node.isLeaf();
                } catch (ClassCastException e2) {
                    try {
                        OrderDataNode node = (OrderDataNode) obj;
                        return node.isLeaf();
                    } catch (ClassCastException e3) {
                        try {
                            OrderStepNode node = (OrderStepNode) obj;
                            return node.isLeaf();
                        } catch (ClassCastException e4) {
                            try {
                                ToolNode node = (ToolNode) obj;
                                return node.isLeaf();
                            } catch (ClassCastException e5) {
                                System.out
                                        .println("ERREUR : Arbre des référence, problème de cast dans isLeaf de OrdersTreeModel_New");
                                e5.printStackTrace();
                            }
                            e4.printStackTrace();
                        }
                        e3.printStackTrace();
                    }
                    e2.printStackTrace();
                }
                e.printStackTrace();
            }
            return false;
        }
     
        public void removeTreeModelListener(TreeModelListener arg0) {
        }
     
        public void valueForPathChanged(TreePath arg0, Object arg1) {
        }
     
    }
    Je n'utilise pas de DefaultTreeModel car au départ, mes noeuds implémentait TreeNode et j'ai changé pour pouvoir appellé la méthode getPath() et je n'ai pas voulu changer tout mon model.

    Pour getPath() et scrollPathToVisible() qui ne fonctionnent pas vraiment, getPath() semble fonctionner car si je fais un System.out.println(), j'ai bien le bon chemin mais scrollPathToVisible() m'ouvre toujours le même noeud.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Je n'ai pas de réponse concernant le problème de rafraîchissement. C'est quoi la méthode getPath() ?
    Par contre ton code est très lourd ! Pourquoi tous ces ClassCastException ?
    Les classes RootNode / PartNode_New / OrderDataNode / OrderStepNode / ToolNode n'implémentent-elles pas toutes TreeNode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Object getChild(Object obj, int index) {
       TreeNode node = (TreeNode) obj;
       return node.getChildAt(index);
    }

  6. #6
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Mes classe n'implémentent pas TreeNode mais extends DefaultMutableTreeNode mais tous les try/catch peuvent être simplifié par des instance of sauf que j'ai mis une ancienne version (dsl).

    Pour getPath(), cette fonction permet de récupérer le chemin d'un noeud pour pouvoir l'ouvrir par la suite avec la fonction scrollPathToVisible() et le chemin en paramètre.

    Merci
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    +1 pour Hervé91.
    Sinon tu peux nous montrer le code ou tu fais appel à tes méthodes getPath() et scrollPathToVisible()?

    et ôtes moi d'un doute: tu n'utilises pas la méthode getPath() des DefaultMutableTreeNode, qui renvoit un TreeNode[], en paramètre de la méthode scrollPathToVisible(TreePath path)?

  8. #8
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Voici la dernière version de mon 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
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    package org.scn.graphics.manufactorders.planning.horizontal;
     
    import java.util.Vector;
     
    import javax.swing.event.TreeModelListener;
    import javax.swing.tree.TreeModel;
    import javax.swing.tree.TreePath;
     
    public class OrdersTreeModel implements TreeModel {
     
        private Vector orders;
     
        private RootNode rootPart;
     
        public OrdersTreeModel(Vector v) {
     
            orders = v;
            rootPart = new RootNode("Liste des Références");
            rootPart.addChildren(orders);
        }
     
        public void addTreeModelListener(TreeModelListener arg0) {
        }
     
        public Object getChild(Object obj, int index) {
     
            if (obj instanceof RootNode) {
                RootNode node = (RootNode) obj;
                return node.getChildAt(index);
            }
            if (obj instanceof PartNode_New) {
                PartNode_New node = (PartNode_New) obj;
                return node.getChildAt(index);
            }
            if (obj instanceof OrderDataNode) {
                OrderDataNode node = (OrderDataNode) obj;
                return node.getChildAt(index);
            }
            if (obj instanceof OrderStepNode) {
                OrderStepNode node = (OrderStepNode) obj;
                return node.getChildAt(index);
            }
            if (obj instanceof ToolNode) {
                ToolNode node = (ToolNode) obj;
                return node.getChildAt(index);
            }
            System.out
                    .println("ERREUR : Arbre des référence, problème de cast dans getChild de OrdersTreeModel_New");
            return null;
        }
     
        public int getChildCount(Object obj) {
     
            if (obj instanceof RootNode) {
                RootNode node = (RootNode) obj;
                return node.getChildCount();
            }
            if (obj instanceof PartNode_New) {
                PartNode_New node = (PartNode_New) obj;
                return node.getChildCount();
            }
            if (obj instanceof OrderDataNode) {
                OrderDataNode node = (OrderDataNode) obj;
                return node.getChildCount();
            }
            if (obj instanceof OrderStepNode) {
                OrderStepNode node = (OrderStepNode) obj;
                return node.getChildCount();
            }
            if (obj instanceof ToolNode) {
                ToolNode node = (ToolNode) obj;
                return node.getChildCount();
            }
            System.out
                    .println("ERREUR : Arbre des référence, problème de cast dans getChildCount de OrdersTreeModel_New");
            return 0;
        }
     
        public int getIndexOfChild(Object arg0, Object arg1) {
            return 0;
        }
     
        public Object getRoot() {
     
            return rootPart;
        }
     
        public boolean isLeaf(Object obj) {
     
            if (obj instanceof RootNode) {
                RootNode node = (RootNode) obj;
                return node.isLeaf();
            }
            if (obj instanceof PartNode_New) {
                PartNode_New node = (PartNode_New) obj;
                return node.isLeaf();
            }
            if (obj instanceof OrderDataNode) {
                OrderDataNode node = (OrderDataNode) obj;
                return node.isLeaf();
            }
            if (obj instanceof OrderStepNode) {
                OrderStepNode node = (OrderStepNode) obj;
                return node.isLeaf();
            }
            if (obj instanceof ToolNode) {
                ToolNode node = (ToolNode) obj;
                return node.isLeaf();
            }
            System.out
                    .println("ERREUR : Arbre des référence, problème de cast dans isLeaf de OrdersTreeModel_New");
            return true;
        }
     
        public void removeTreeModelListener(TreeModelListener arg0) {
        }
     
        public void valueForPathChanged(TreePath arg0, Object arg1) {
        }
     
    }
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  9. #9
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Voici également le code d'ou j'appelle getPath()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TreePath tp = new TreePath(node.getPath());
    System.out.println(tp);
    tree.expandPath(tp);
    tree.scrollPathToVisible(tp);
    node est le noeud que je voudrai ouvrir dans mon arbre.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  10. #10
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par reno_tidus Voir le message
    Mes classe n'implémentent pas TreeNode mais extends DefaultMutableTreeNode mais tous les try/catch peuvent être simplifié par des instance of sauf que j'ai mis une ancienne version (dsl).
    Mais DefaultMutableTreeNode implémente TreeNode !

  11. #11
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Et mer.., c'est vrai je suis complètement à l'ouest avec cet arbre en ce moment (ça fait 15 jour que je bosse dessus).

    Merci pour cette amélioration par contre ça ne répond pas à ma question d'origine sur les trait qui n'apparaissent pas entre père et fils. Avez-vous une idée la dessus.

    Merci.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Essaies ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myTree.putClientProperty("JTree.lineStyle", "Angled");
    A noter qque l'apparition de ces lignes dépendent du L&F, par exemple pour les L&F Mac ou Gnome ces lignes ne sont pas censées apparaitre (les trees mac ou gnome n'ont pas de traits)

    http://java.sun.com/docs/books/tutor...ents/tree.html
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  13. #13
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Merci Sinok mais j'ai déjà testé ceci, mais comme je l'ai dit ce n'est pas celà car certains traits apparaissent mes pas les autres.
    Le mieux serai un exemple, voici à peu près ce que j'ai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    racine
       |_ Noeud 1
          |_  Sous Noeud  1
            _  Sous Noeud 2
        _ Noeud 2
        _ Noeud 3
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    racine
       |_ Noeud 1
       |  |_  Sous Noeud  1
       |  |_  Sous Noeud 2
       |_ Noeud 2
       |_ Noeud 3
    Le premier fils est toujours relié a son père mais les autres sont dans le vide.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

  14. #14
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Bon vous pouvez arreter de réfléchir là dessus, j'ai trouvé la solution, c'était une erreur dans toutes mes classes qui extends DefaultMutableTreeNode. Je surchargeais une fonction qui fesais buggé le truc.
    Vos questions, c'est sur le forum, pas de M.P.
    Commencez par lire la F.A.Q., rechercher dans le forum et dans les cours et surtout sur l'ami


    Une fois votre problème résolu n'oubliez pas le tag

    http://www.ententemontignyhandball.com/

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

Discussions similaires

  1. [DW2] Problème avec modèle de Dreamweaver 2
    Par Joachim49 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 30/03/2007, 11h45
  2. JTree : problème d'affichage ajout/suppression noeud
    Par rnan dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2006, 08h12
  3. [JTree] Récupérer le modèle à partir de la sélection
    Par bizerta dans le forum Composants
    Réponses: 7
    Dernier message: 08/06/2005, 13h18
  4. [JTree] Problème d'ouverture de chemin dans un JTree
    Par antares24 dans le forum Composants
    Réponses: 2
    Dernier message: 11/03/2005, 08h18
  5. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06

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