Home / Programmazione / Java / Riempire un JTree con file in maniera ricorsiva
Mattepuffo

Riempire un JTree con file in maniera ricorsiva

Riempire un JTree con file in maniera ricorsiva

Quello che vogliamo ottenere è un JTree riempito con directory e file in maniera ricorsiva.

Quindi, scelta la directory iniziale attraverso un JFileChooser, riempiamo il JTree.

Cominciamo dal JFileChooser:

import java.io.File;
import javax.swing.JFileChooser;

public class FileChooserOpen extends JFileChooser {

    private File dir = null;

    public FileChooserOpen() {
        super("Scegli directory");
        setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        setAcceptAllFileFilterUsed(false);
    }

    @Override
    public void approveSelection() {
        dir = getSelectedFile();
        super.approveSelection();
    }

    public File getDir() {
        return dir;
    }
}

A questo punto, impostiamo un evento dove vi pare, che lancia il JFileChooser e prende la directory scelta.

Una cosa del genere:

                FileChooserOpen fco = new FileChooserOpen();
                fco.showOpenDialog(null);
                File dir = fco.getDir();
                DefaultMutableTreeNode root = scanDir(dir);
                DefaultTreeModel model = new DefaultTreeModel(root);
                tree.setModel(model);

Bene, ci manca di mettere su solo il metodo scanDir, che esegue la scansione ricorsiva.

Seguendo i consigli sul forum IProgrammatori.it, questo è ciò che è venuto fuori:

    private DefaultMutableTreeNode scanDir(File dir) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(dir);
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                DefaultMutableTreeNode childNode = scanDir(file);
                node.add(childNode);
            }
        }
        return node;
    }

Per il resto:

  • ricordatevi che siamo dentro a un JFrame
  • ho tralasciato l'inizializzazione del JTree, ma lo creiamo vuoto in questo caso
  • non ho impostato nessun criterio di ordinamento dei file

Enjoy!