Newsgroup: it.comp.java
Titolo: perfavore duplicare i nodi di un albero

Ho questo problema cercherò di spiegarmi al meglio possibile ed è da due
giorni che non trovo soluzione.
Ho due alberi diciamo jtree 1 e jtree2
cliccando su un nodo del jtree 1 voglio che il jtree2 visualizzi il jtree1 e
che il jtree1 venga cancellato e ricreato con altri nodi.
L'evento lo gestisco correttamente. il problema è che non riesco a creare
una copia del jtree1. senza cancellarlo. In pratica se copio nodo per nodo
ogni volta che faccio getnextnode() il nodo viene fisicamente rimosso dal
jtree1 e questo non va bene perchè mi crea una nullpointereception nella
gestione del clik sul jtree1.
Ho provato anche ad utilizzare .child() sulla root di jtree1 per farmi
restituire un'enumerazione, ma quando vadoa fare il travaso con il seguente
codice
    jtree2.removeAllChildren();
    Enumeration temp_enum=jtree1.children();
    while (temp_enum.hasMoreElements()) {
    root_prec.add((MutableTreeNode) temp_enum.nextElement());
    }
vengono copiati solo la metà dei nodi perchè inspiegabilmente ogni volta che
faccio.nextElement() il numero delgi elementi presenti enll'enumerazione
diminuisce.
perfavore aiutatemi che non so più che pesci pigliare
grazie a tutti
-- 
Runner73

 che il jtree1 venga cancellato e ricreato con altri nodi.
Ciao,
se ho capito correttamente(cioč vuoi copiare tutto l'albero) la 
soluzione č semplice. Basta che ti fai dare il TreeModel dal primo JTree 
e lo assegni al secondo
   tree2.setModel(tree1.getModel());
e poi crei un nuovo modello per tree1.
Ti ho fatto un esempietto.. sai com'č.. l'insonnia... :)
Marco
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class TreeTest extends JFrame {
   private JTree tree1 = null;
   private JTree tree2 = null;
 
   public TreeTest() {
     tree1 = new JTree(createNodes("1"));
     tree2 = new JTree(createNodes("2"));
     JPanel panel = new JPanel();
     panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
     panel.add(new JScrollPane(tree1));		
     panel.add(new JScrollPane(tree2));
 
     JButton button = new JButton("Switch models");
     button.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         tree2.setModel(tree1.getModel());
         tree1.setModel(new DefaultTreeModel(createNodes("3")));
       }
     });
 
     getContentPane().add(panel, BorderLayout.CENTER);
     getContentPane().add(button, BorderLayout.SOUTH);
   }
   private DefaultMutableTreeNode createNodes(String i) {
     DefaultMutableTreeNode top = new DefaultMutableTreeNode("Top" + i);
     top.add(new DefaultMutableTreeNode("node" + i + ".1"));
     top.add(new DefaultMutableTreeNode("node" + i + ".2"));
     top.add(new DefaultMutableTreeNode("node" + i+ ".3"));
     return top;
   }		
   public static void main(String[] args) {
     JFrame frame = new TreeTest();
     frame.setSize(300, 300);
     frame.setVisible(true);
   }
}
-- 
replay: remove .duh.spam

 ha scritto nel messaggio
news:3f7cbd65$1...@news.swissonline.ch...


 troppo a basso livello, agivo sui nodi.
Bhe, pensare in Java non centra molto :)
Più che altro, in questo caso, si tratta di MVC.
Ciau
Marco
-- 
replay: remove .duh.spam

      top.add(new DefaultMutableTreeNode("node" + i + ".2"));
Prendo spunto dal tuo eempio per chiederti un'altra cosina. Non so perchè ma
sulla rete si trova tutto tranne le cose che servono a me. Se puoi dammi
quest'altro piccolo aiuto
una volta che ho cliccato sul pulsante, il nuovo albero ha un nodo root che
a video appare con il nome settato al momento della creazione del nodo root
("Top"+i). Come faccio a cambiare a runtime questo nome in un'altra stringa
qualsiasi?

 Più che altro, in questo caso, si tratta di MVC.
Scusa per cosa sta MVC?

 
Eh, qua mi chiedi troppo, cmq la migliore documentazione a cui fare 
riferimento č senza dubbio l'API.
Intuitivamente direi di risalire al nodo in questione e modificare il 
valore che viene visualizzato. Come non lo so, non ho voglia di cercare 
nell'API ;)


Runner73 wrote:

Model-View-Controller
http://www.javaworld.com/javaworld/jw-04-1998/jw-04-howto.html
http://java.sun.com/products/jfc/tsc/articles/architecture/
http://java.sun.com/products/jfc/tsc/articles/getting_started/getting_started2.html
http://java.sun.com/blueprints/patterns/MVC.html
Se poi vuoi conoscere nel dettaglio come è definito il modello del 
JTree(se devi fare operazioni complesse puo esserti utile)
http://java.sun.com/products/jfc/tsc/articles/jtree/index.html
-- 
replay: remove .duh.spam

Ok grazie lo stesso farň riferimento ai link ke mi hai postato sopra per
vedere se risolvo qualcosa. L'api la sto setacciando da due giorni, ma io
non ci leggo niente di utile per me :)
-- 
Runner73

 
Ho dato un occhiata, e infatti, guardando la descrizione nell'API di 
DefaultMutableTreeNode trovi:
"A DefaultMutableTreeNode may also hold a reference to a user object, 
the use of which is left to the user. Asking a DefaultMutableTreeNode 
for its string representation with toString() returns the string 
representation of its user object."
da cui si puo dedurre che ti serve
setUserObject(Object userObject)
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Top" + i);
top.setUserObject(new String("blah"));


grazie, ma per una volta c'ero arrivato da solo e prima del tuo suggerimento
:-).
COmunque ho visto che sul sito di 
java.sun.com
 c'č un'ampia raccolata di faq
ed un forum dove in pratica queste "cazzate" (per gli altri ma non per me)
sono state trite e ritrite. Beh vorrą dire che romperņ un pņ meno sul
newsgoup
ciao e grazie di nuovo


 newsgoup
Si, il forum della sun è una buona risorsa.
Ciau
-- 
replay: remove .duh.spam