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 :

Ajouter ou supprimer noeud dans un JTree


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 34
    Points
    34
    Par défaut Ajouter ou supprimer noeud dans un JTree
    Bonjour,

    j'ai un problème qui me turlupine!!!

    lorsque je veux créer ou supprimer un noeud j'ai toujours comme erreur nullPointerException
    Voilà comment je fais :

    j'ai différents types de noeud qui corresponde chacun à une classe qui dérive toutes de DefaultMutableTreeNode

    Pour ajouter un noeud j'ai la méthode addEnfant qui se trouve dans le noeud parent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void addEnfant(Besoin besoin){
           BesoinNode bn = new BesoinNode(this,besoin,bm);
           lstEnfants.add(bn);
           bm.insertNodeInto(bn, this, 
                                    getChildCount());
    }
    Donc pour ajouter mon noeud , je fais
    "bm.insertNodeInto(bn, this,
    getChildCount());"
    Pour info, bm n'est pas égal à null
    j'ai essayé insert(bn,0);

    Pour le remove, je fais bm.removeNodeFromParent(bn);

    Quel est le problème ?

    Merci d'avoir lu mon problème

  2. #2
    Membre régulier
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 105
    Points
    105
    Par défaut
    Il faudrait un peu plus de détails sur l'erreur (la ligne exacte en cause notamment) et le code de "insertNodeInto" si c'est une méthode que tu as créée.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    bm.insertNodeInto(bn, this, getChildCount());

    Ca plante à cette ligne avec comme message NullPointerException
    et la méthode insertNodeInto est une méthode de la classe DefaultTreeModel
    bn est de type DefaultMutableTreeNode
    this est de type DefaultMutableTreeNode
    getChildCount() est la position ou je veux insérer le noeud soit à la fin

    merci de ton aide

  4. #4
    Membre régulier
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 105
    Points
    105
    Par défaut
    Autant pour moi pour moi pour insertNodeInto, il me semblait bien l'avoir croisé mais JavaSearch.developpez.com ne l'a pas trouvé...

    Par réflexe du gars qui n'a plus rien à perdre je te dirais bien de tester getChildCount()-1 mais je n'y crois pas plus que ça et tu as probablement déjà testé.

    Après si bm et bn ne sont pas null et que la première ligne d'exception concerne vraiment ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bm.insertNodeInto(bn, this, getChildCount());
    effectivement c'est très étrange...

    Sinon tu peut toujours essayer de comprendre ce qu'il se passe sous le capot

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Voilà ca fonctionne
    Je ne comprend quand même pas pourquoi j'avais comme erreur NullPointerException. Si quelqu'un peut m'expliquer ce serait sympa

    Je vais expliquer ce que j'ai fait.

    Mon arbre a différents types de noeud.
    Chaque type de noeud est une classe dérivant de DefaultMutableTreeNode.
    Dans mon constructeur, je crée des noeuds enfants qui est dans une Arraylist

    J'ai implémenté les méthodes getCHildCount et getChildAt.

    Lorsque je veux ajouter un enfant, je l'ajoute dans mon arrayList et ensuite j'appelle la méthode nodesWereInserted pour signler qu'un enfant a été ajouté. Le méthode getCHildCount et getChildAt sont appelé automatiquement ce qui ajoute l'enfant dans l'arbre.
    C'est le même système pour retirer un enfant.

    Si ca peut aider
    Voilà ma méthode pour ajouter un fils qui se trouve dans le noeud parent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void addEnfant(Besoin besoin){
           BesoinNode bn = new BesoinNode(this,besoin,bm);
           lstEnfants.add(bn);
           int[] childIndice = new int[1];
           childIndice[0] = getChildCount()-1;
           bm.nodesWereInserted(this,childIndice);      
        }
     
    // BesoinNode bn dérive de DefaultMutableTreeNode
    // lstEnfants (ArrayList<BesoinNode>)
    // bm  (DefaultTreeModel)
    Merci de m'avoir aider

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Si ton problème est bel et bien résolu, n'oublie pas

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Re, voilà finalement comment je fait pour ajouter un fils :

    L'ancienne facon n'était pas correct parce que je n'utilisais pas les bonnes méthodes. On voyait bien les modifs grafiquement mais lorsque j'appelais une méthode du noeud ou du modèle en rapport au fils. Les changements n'étaient pas pris en compte. La variable children(protected Vector) du noeud n'était pas changée d'où l'importance de la méthode add de DefaultMutableTreeNode

    J'ai cette méthode dans un de mes noeuds parents.
    Il suffit donc d'appeler la méthode add de DefaultMutableTreeNode
    et d'appeler la méthode nodesWereInserted du model.
    C'est la même chose pour le remove

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void addEnfant(Besoin besoin){
           BesoinNode bn = new BesoinNode(besoin,bm);
           add(bn);
           int[] childIndice = new int[1];
           childIndice[0] = getChildCount()-1;
           bm.nodesWereInserted(this,childIndice);   
        }

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

Discussions similaires

  1. Ajout de Noeud dans un JTree dynamique
    Par Dia972 dans le forum Composants
    Réponses: 4
    Dernier message: 18/02/2015, 16h59
  2. [JDOM] ajout d'un noeud dans un fichier xml en java
    Par sampaiX dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/04/2010, 18h53
  3. ajouter des répertoires (noeuds) dans un arbre ?
    Par blueLight dans le forum Composants
    Réponses: 0
    Dernier message: 31/08/2009, 12h54
  4. [DOM] Ajout d'un noeud dans XML
    Par alliance dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 18/06/2009, 12h37
  5. Réponses: 1
    Dernier message: 26/11/2008, 04h15

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