Per creare un albero di cartelle in Java è necessario importare la classe jTree e defaultMutableTreeNode: la prima corrisponde all´albero in sè, la seconda corrisponde ai nodi dell´albero, quindi ai file e alle cartelle.
Vediamo come realizzarlo.
Java
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
/**
** @author CARLO*/public class Tree {DefaultMutableTreeNode top;
JTree jTree1;
DefaultMutableTreeNode dmtnParent;
public Tree(){
File root;
JFrame frame = new JFrame("FileTreeDemo");JScrollPane scrollpane = new JScrollPane();frame.getContentPane().add(scrollpane, "Center");frame.setSize(400,400);frame.setVisible(true);File f = new File("C:\");makeTree(f,scrollpane);// gestisco chiusura della finestra
frame.addWindowListener(new WindowListener(){public void windowOpened(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
public void windowClosing(WindowEvent e) {System.exit(0);}
public void windowClosed(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
public void windowIconified(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
public void windowDeiconified(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
public void windowActivated(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
public void windowDeactivated(WindowEvent e) {throw new UnsupportedOperationException("Not supported yet.");}
});}
public void makeTree(File f,JScrollPane jScrollPane1){top = new DefaultMutableTreeNode(f);jTree1 = new JTree(top);jScrollPane1.setViewportView(jTree1);jTree1.addTreeSelectionListener(new TreeSelectionListener(){@Overridepublic void valueChanged(TreeSelectionEvent arg0) {// estraggo il nome del file cliccato e creo il file
dmtnParent = (DefaultMutableTreeNode) jTree1.getLastSelectedPathComponent();File f = new File(dmtnParent.toString());// genero la lista degli elementi contenuti nella cartella
// questo può essere un file e non creare nessuna lista (L´eccezione è gestita dopo)
addChildrens(f.listFiles());}
});}
public void addChildrens(File [] childrens){int i;
try {for (i = 0; i < childrens.length; i++) {dmtnParent.add(new DefaultMutableTreeNode(childrens[i])); // Aggiungo il file o la cartella al Tree}
} catch (java.lang.NullPointerException npe) {System.out.println("impossibile accedere - Potrebbe essere un File"); // ecco l´eccezione}
}
public static void main(String [] Args){
new Tree();}
}
SPIEGAZIONE
Innanzitutto realizziamo il lato grafico del programma, costituito dal frame principale e da un JScrollPane che conterrà l´albero.
Ora creiamo l´albero attraverso la funzione makeTree: è una funzione che si occupa di creare il nodo della cartella/file che gli passiamo come argomento. Nel primo caso questo corrisponderà ovviamente alla radice del nostro pc, quindi al disco rigido che solitamente è il C.
A questo punto il programma rimane fermo fino al click su un nodo: nel momento in cui questo è cliccato viene trasformato in un oggetto File e viene creata la lista dei file contenuti nel nodo. E´ ovvio che se il nodo è un file allora l´oggetto lista sarà null. La lista passa ora alla funzione addChildrens() che aggiungerà all´albero tanti nodi quanti sono i file/cartelle contenuti nella lista.