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!
java jtree jfilechooser defaultmutabletreenode defaulttreemodel
Commentami!