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 finestraframe.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 filedmtnParent = (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.
