Boa Tarde, pessoal!
Estou fazendo uma aplicação e pretendo usar JTree para fazer um menu como o Windows Explorer. Está tudo funcionando certinho, exceto por um pequeno problema de visualização das pastas vazias. O que acontece é que quando o código encontra uma pasta vazia ele não o exibe como uma pasta, mas sim como um arquivo.
Abaixo seque o código que estou utilizando:
[code]import javax.swing.;
import javax.swing.tree.;
import java.awt.Color;
import java.awt.Container;
import java.io.*;
public class Explorador extends JFrame{
public Explorador() {
JFrame frame = new JFrame(“Explorador”);
Container cp = frame.getContentPane();
DefaultMutableTreeNode master = new DefaultMutableTreeNode("ROOT");
JTree tree = new JTree(master);
JScrollPane scroll = new JScrollPane(tree);
frame.setSize(400,400);
cp.add(scroll);
// chama o método para popular o JTree
listAllFiles("C:\\temp", master, true);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/*
* @params: String directory ~ o diretório a trabalhar
* @params: DefaultMutableTreeNode parent ~ o node pai
* @params: Boolean recursive ~ determina se vai trabalhar com as subpastas, ou só o pai
*/
public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
// Lista todos os arquivos no diretório "String directory" no array "children"
File [] children = new File(directory).listFiles();
for(int i = 0; i < children.length; i++) {
// Pega o nome de cada Pasta ou Arquivo
DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());
// Só mostra o Node se ele é uma pasta e se esta é uma chamada recursiva
if(children[i].isDirectory() && recursive) {
parent.add(node); // adiciona como filho
listAllFiles(children[i].getPath(), node, recursive); // chamada recursiva para trabalhar com o filho
}else if(!children[i].isDirectory()){ // senão caso não seja um diretório
parent.add(node); // adiciona como um arquivo
}
}
}
public static void main(String []args){
Explorador app = new Explorador();
}
}[/code]
Ja pesquisei e não encontrei solução e agora resolvi perguntar, como faço para as pastas vazias serem reconhecidas como pastas? O que deixei faltando para não englobar isso? Nota-se que a pasta vazia não entra no for pois quando listFiles() a avalia, children fica vazio, ou seja, com length = 0 sendo assim não atende a condição do for (i < children.length).
Teria como alguém me ajudar com essa parte? Teria como eu fazer isso sem usar DefaultTreeCellRenderer?
Em anexo segue uma imagem do resultado atual, onde todos nodes com uma marca vermelha ao lado são pastas vazias que caem nesse problema.