Ajout d'un noeud à un Jtree

Fermé
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020 - Modifié le 26 févr. 2019 à 09:19
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020 - 7 mars 2019 à 08:46
Bonjour à toutes et à tous,

J'ai créé un jTree "arbre", et j'aimerai ajouter des noeuds à l'aide d'un bouton et d'une zone de texte.
J'ai pour l'instant le code suivant qui me permet de sélectionner un composant de mon arbre et l'écrire dans la zone de texte.

arbre.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
if (arbre.getLastSelectedPathComponent() != null) {
System.out.println(arbre.getLastSelectedPathComponent());

DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
nomAddedNode.setText(parent.getUserObject().toString());

}
}




J'aimerai savoir comment faire, merci d'avance !!!



UPDATE

J'ai continué mon code

arbre.addTreeSelectionListener(new TreeSelectionListener() {
    @Override
    public void valueChanged(TreeSelectionEvent e) {
            System.out.println(arbre.getLastSelectedPathComponent());

            DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
            nomAddedNode.setText(parent.getUserObject().toString());

        addNode.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource()==addNode){
                    System.out.println("addnode");

                    DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
                    DefaultMutableTreeNode nouveau = new DefaultMutableTreeNode(nomAddedNode.getText());
                    parent.add(nouveau);

                    //Reload Jtree

                    DefaultTreeModel model = (DefaultTreeModel) arbre.getModel();
                    model.reload();
                }
            }
        });
      //  removeNode.addActionListener(this);




    }



Mais j'ai des erreurs au moment où j'appuie sur mon bouton addNode....

1 réponse

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
1 mars 2019 à 23:59
Bonjour,

Alors la ligne 125 de la classe Interface.java c'est quelle ligne exactement ?
0
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020
Modifié le 4 mars 2019 à 08:54
Bonjour !

J'ai pu continuer mon code en ajoutant un deuxième bouton supprimer "removeNode" qui "fonctionne".


public void JTreebdd() {


            DefaultMutableTreeNode racine = new DefaultMutableTreeNode("bdd MSPIFM");
            DefaultMutableTreeNode grosVolume = new DefaultMutableTreeNode("Gros volume");
            DefaultMutableTreeNode gv1 = new DefaultMutableTreeNode(" GV-1");
            DefaultMutableTreeNode gv2 = new DefaultMutableTreeNode(" GV-2");
            DefaultMutableTreeNode gv3 = new DefaultMutableTreeNode(" GV-3");
            DefaultMutableTreeNode gv4 = new DefaultMutableTreeNode(" GV-4");
            DefaultMutableTreeNode gv1_E1 = new DefaultMutableTreeNode("E1_gv");
            DefaultMutableTreeNode gv1_E2 = new DefaultMutableTreeNode("E2_gv");
            DefaultMutableTreeNode gv1_E3 = new DefaultMutableTreeNode("E3_gv");
            DefaultMutableTreeNode gv1_E4 = new DefaultMutableTreeNode("E4_gv");
            DefaultMutableTreeNode boite1_E1_GV = new DefaultMutableTreeNode("Boite 1");
            DefaultMutableTreeNode carteA = new DefaultMutableTreeNode("Carte A");
            DefaultMutableTreeNode piecesA = new DefaultMutableTreeNode("Pièces A");

            carteA.add(piecesA);
            boite1_E1_GV.add(carteA);
            gv1_E1.add(boite1_E1_GV);
            gv1.add(gv1_E1);
            gv1.add(gv1_E2);
            gv1.add(gv1_E3);
            gv1.add(gv1_E4);
            grosVolume.add(gv1);
            grosVolume.add(gv2);
            grosVolume.add(gv3);
            grosVolume.add(gv4);
            racine.add(grosVolume);

            DefaultMutableTreeNode salleCablage = new DefaultMutableTreeNode("Salle de cablâge");
            DefaultMutableTreeNode sc1 = new DefaultMutableTreeNode(" SC-1");
            DefaultMutableTreeNode sc1_E1 = new DefaultMutableTreeNode("E1_sc");
            DefaultMutableTreeNode boite1_E1_SC = new DefaultMutableTreeNode("Boite 1");
            DefaultMutableTreeNode carteB = new DefaultMutableTreeNode("Carte B");
            DefaultMutableTreeNode piecesB = new DefaultMutableTreeNode("Pièces B");

            carteB.add(piecesB);
            boite1_E1_SC.add(carteB);
            sc1_E1.add(boite1_E1_SC);
            sc1.add(sc1_E1);
            salleCablage.add(sc1);
            racine.add(salleCablage);


            JTree arbre = new JTree(racine);



            JScrollPane scroll = new JScrollPane(arbre);

            getContentPane().add(scroll);

            this.setVisible(true);




           arbre.addTreeSelectionListener(new TreeSelectionListener() {
      @Override
      public void valueChanged(TreeSelectionEvent e) {
          System.out.println(arbre.getLastSelectedPathComponent());

          TreeSelectionModel smd = arbre.getSelectionModel();
          if(smd.getSelectionCount()>0){

          DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
          nomAddedNode.setText(parent.getUserObject().toString());
          }

          addNode.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  if (e.getSource()==addNode){
                      DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
                      DefaultMutableTreeNode nouveau = new DefaultMutableTreeNode(nomAddedNode.getText());
                      parent.add(nouveau);

                      //Reload Jtree

                      DefaultTreeModel model = (DefaultTreeModel) arbre.getModel();
                      model.reload();

                  }

          removeNode.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  if (e.getSource()==removeNode){

                      DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arbre.getLastSelectedPathComponent();
                      if (parent != arbre.getModel().getRoot()) {
                          DefaultTreeModel model = (DefaultTreeModel) arbre.getModel();
                          model.removeNodeFromParent(parent);
                          model.reload();
                      }
                  }
              }
          });

     }

}); }
});

    }
image.png



En appuyant sur le bouton "addNode", j'ai bien un noeud qui s'ajoute dynamiquement à mon arbre, mais j'obtiens les erreurs suivantes:



La ligne 165 correspond au public void actionPerformed, au niveau de la ligne "parent.add(nouveau);"
Pour être pus exacte, cette erreur apparait lorsque j'ajoute deux noeuds à la suite...Même si tous les noeuds ajoutés apparaissent quand même sur mon arbre.

Pour faire simple, j'ai l'impression que mon code gère mal l'appuie sur le même bouton plusieurs fois d'affilé.

Merci de ton aide.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
7 mars 2019 à 01:26
Bonjour,

Cela veut dire que "parent" est null.
C'est un premier pas, vous devez maintenant suivre son initialisation. Mais je ne comprends pas le fait que les noeuds s'affichent correctement.
0
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020
7 mars 2019 à 08:46
Bonjour,

J'ai migré mon jtree dans une nouvelle classe à part, et le problème ne survient apparement plus...Mais il y a quelque chose de bizarre, mon programme doit m'afficher sur ma console le mot cliqué sur mon Jtree, il le fait....Mais l'affiche 14 fois....APres ce n'est pas gênant...Mais bizarre
0