Newsgroup: it.comp.java
Titolo: JTree HELLPPP!!

Ciao a tutti,
vorrei sapere con quali metodi è possibile far si che quando clicco
due volte sul nome faccia una certa cosa mentre se clicco sul "+" a
fianco del nome ne faccia un'altra!!!
devo aggiungere quindi un listener ma nn riesco a fargli riconoscere
gli eventi.. se nn è possibile fare la distinzione che faccio (singolo
click o doppio) va bene anche uno dei due!!
premetto che cio che sun mette sulle API relative al JTree non mi
funziona!
Grazie a tutti

In sostanza ogni volta che clicco devo prendere il nome della
directory/file ed analizzarlo!

 
Prova con un costrutto simile.
Alla tua classe fai implementare MouseListener e ne passi la referenza 
al JTree. Inserisci la tua implementazione nel metodo mouseClicked();
Esempio:
public class TreePane extends JTree implements MouseListener {
	public TreePane() {
		addMouseListener(this);
	}
	public void mouseClicked(MouseEvent me) {
		if (SwingUtilities.isRightMouseButton(me)) {
		//mostra popup, ad esempio.
		}
		if (SwingUtilities.isLeftMouseButton(me) && me.getClickCount() == 2) {
		//Analizza path.
		}
	}
}
Ovviamente ci sono altri metodi che devi obbligatoriamente estendere che 
erediti da MouseListener.

io avevo pensato a quest'altro modo:
tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
               System.out.println("Valore albero cambiato");
               DefaultMutableTreeNode node =
(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                if (node == null) return;
                Object nodeInfo = node.getUserObject();
            }
        });
questo metodo è nel costruttore della classe principale. Il problema
che per Button ecc tutto funziona correttamente ma solo per il JTree nn
va bene! anche se compila tutto correttamente ma se premo sull'albero
nn mi stampa nulla!!
che sbaglio? Grazie a tutti


Il codice e' corretto, ma fa quello che ti serve? dal tuo primo post mi 
pare di capire che devi gestire eventi di click sui tuoi nodi. E questo 
lo fa il codice che ti ho postato in risposta. Questo codice invece 
resta in ascolto di eventi di *modifica* dei nodi. Ovvero, quel codice 
verra' eseguito quando cambierai il valore di un nodo (tu o un'altra 
entita').

ah quindi il listener postato nella seconda risposta nn resta in
ascolto finche nn viene selezionato un nodo? a quanto sembra dovrebbe
eseguire il codice con la selezione mi sbaglio? se cosi fosse allora
riprendo il codice che mi hai postato!!
cmq si il mio scopo è che: prima di aprire una cartella selezionata
devo analizzare alcune cose per prima il nome della cartella o del
file!!

P.S: Cio che dici tu ossia sulla risposta n. 3 ossia creare una classe
puo equivalare a questo:
MouseListener ml = new MouseAdapter() {
       public void mouseClicked(MouseEvent e) {
                int selRow = tree.getRowForLocation(e.getX(),
e.getY());
                TreePath selPath = tree.getPathForLocation(e.getX(),
e.getY());
                if(selRow != -1) {
                     if(e.getClickCount() == 1) {
                         mySingleClick(selRow, selPath);
                     }
             else if(e.getClickCount() == 2) {
                 myDoubleClick(selRow, selPath);
             }
         }
     }
 };
 tree.addMouseListener(ml);
in sostanza è la stessa cosa, eccezion fatta sulla creazione di una
nuova classe

 directory/file ed analizzarlo!
usa un MouseListener
-- 
Pietro
(\_/)  <- This is Bunny.
(°_°)     Copy Bunny into your signature to help
(> <)     him on his way to world domination.