Newsgroup: it.comp.java
Titolo: Visualizzare nodi aggiunti ad un JTree

Voglio aggiungere un nodo dinamicamente al JTree precedentemente creato. Il
nodo è aggiunto ogni volta che viene premuto il tasto F5: riesco a
visualizzarlo, ma se clicco nuovamente su F5 un secondo nodo viene creato
(lo vedo dai messaggi sulla Java Console) ma non viene visualizzato.
Sotto riporto il mio codice, qualcuno sa dirmi come devo fare?
Grazie
Francesca
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class F52 extends JApplet
                          implements KeyListener {
private JTree tree;
protected DefaultTreeModel treeModel;
DefaultMutableTreeNode component =
   new DefaultMutableTreeNode("Radice");
 DefaultMutableTreeNode container =
   new DefaultMutableTreeNode("Figlio1");
 DefaultMutableTreeNode box =
   new DefaultMutableTreeNode("Figlio2");
public void init() {
 component.add(container);
 component.add(box);
 tree = new JTree(component);
 tree.addKeyListener(this);
 treeModel = new DefaultTreeModel(component);
 treeModel.addTreeModelListener(new MyTreeModelListener());
 getContentPane().add(tree);
}
 public void keyTyped(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_F5) {
      System.out.println("F5");
 }//if (e.getKeyCode() == KeyEvent.VK_DOWN) {
    }
public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_F5) {
  System.out.println("F5");
 }//if (e.getKeyCode() == KeyEvent.VK_DOWN) {
    }
    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_F5) {
  System.out.println("F5");
  DefaultMutableTreeNode fox =
   new DefaultMutableTreeNode("Nipote");
  addObject(box, "Nipote", true);
 }//if (e.getKeyCode() == KeyEvent.VK_DOWN) {
}
public void clear() {
       component.removeAllChildren();
        treeModel.reload();
    }
public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
                                            Object child,
                                            boolean shouldBeVisible) {
 System.out.println("dentro a addobject");
 Integer numfigli = new Integer(parent.getChildCount());
// numfigli = parent.getChildCount();
 String numero = numfigli.toString();
 System.out.println("num figli " + numero);
        DefaultMutableTreeNode childNode =
                new DefaultMutableTreeNode(child + numero);
        if (parent == null) {
            parent = component;
        }
        treeModel.insertNodeInto(childNode, parent,
                                 parent.getChildCount());
        // Make sure the user can see the lovely new node.
        if (shouldBeVisible) {
            tree.scrollPathToVisible(new TreePath(childNode.getPath()));
        }
 treeModel.reload(childNode);
        return childNode;
    }
class MyTreeModelListener implements TreeModelListener {
 public void treeNodesChanged(TreeModelEvent e) {
 System.out.println("dentro a NodesChanged" + e);
        }
        public void treeNodesInserted(TreeModelEvent e) {
 System.out.println("dentro a NodesInserted" + e);
        }
 public void treeNodesRemoved(TreeModelEvent e) {
 System.out.println("dentro a NodesRemoved" + e);
        }
        public void treeStructureChanged(TreeModelEvent e) {
 System.out.println("dentro a StructureChanged" + e);
        }
  }
}

                                  parent.getChildCount());
In questo modo tu 'piazzi' il nodo alla locazione specificata da
'getChildCount()'. Forse dovresti usare 'getChildCount() + 1'.
N.B. non ho testato il codice...
Davide