Como criar uma estrutura de diretórios em arvore a partir de registros do banco de dados?

Boa tarde galera, tudo bem?

Então estou com um pequeno problema aqui. Preciso desenvolver uma aplicação em java que liste todos os registros do banco de dados em forma de arvore de diretórios (como o explorer no Windows)

eu tenho uma tabela no banco de dados chamada diretórios e essa tabela possui um auto-relacionamento os campos são os seguintes:

codigo
nome
codigo_pai

sendo por exemplo a seguinte estrutura:

Codigo Nome Codigo_Pai
1 Documentos null
2 Arquivos null
3 Musicas null
4 2012 1
5 Agosto 4

Eu preciso que o programa crie os diretórios raiz (que são os com codigo pai null) e a partir dele crie os No filhos até chegar as folhas.

estou tentando usar a Jtree e criando no Pais e no Filhos com o DefaultMutableTree, mas estou tendo dificuldades como:

Como criar varios diretorios raizes sem que o pai seja subscrito?

Qual estrutura de dados usar para guardar os codigos para que os no filhos saibam quem são seus respectivos nos pais?

por enquanto oque eu tenho é isso galera:

Codigo para criar a classe diretorios e os metodos de acesso ao banco:

[code]public class Diretorio {

public int getCodigo() {
    return codigo;
}

public void setCodigo(int codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public int getCd_pai() {
    return cd_pai;
}

public void setCd_pai(int cd_pai) {
    this.cd_pai = cd_pai;
}

public Diretorio() {
}
private int codigo;
private String nome;
private int cd_pai;

 public static ArrayList<Diretorio> selecionar()
{
    //seleciona todos os registros do BD e gera um vetor de objetos. Cada objeto refere-se
    //a um registro do BD

    //cria um vetor de objetos. Este vetor inicia vazio.
    ArrayList<Diretorio> vetDiretorio = new ArrayList<Diretorio>();

    try{

        Connection conexao = Conexao.abrir();

        Statement comando = conexao.createStatement();

        ResultSet resultado = comando.executeQuery("select * from diretorio");

        //enquanto houver linhas no resultado do SELECT, cria um objeto para cada registro
        //e adiciona no vetor
        while( resultado.next() )
        {
           Diretorio novoDiretorio =new Diretorio();
            novoDiretorio.setCodigo( resultado.getInt("cd") );
            novoDiretorio.setNome( resultado.getString("nome") );
            novoDiretorio.setCd_pai( resultado.getInt("cd_pai") );

            //adiciona no vetor o objeto criado
            vetDiretorio.add(novoDiretorio);
        }

        return vetDiretorio;

    }catch(Exception excecao){
        JOptionPane.showMessageDialog(null,"Exceção: "+excecao.getMessage());
        return null;
    }
}[/code]

Codigo criado no JFrame:

[code]

public class Tela extends javax.swing.JFrame {

private JTree tree;
private DefaultMutableTreeNode noPai;
private DefaultMutableTreeNode noFilho;

private void criaArvore(){
    ArrayList<Diretorio> listaDiretorio = Diretorio.selecionar();
    for (int valor = 0; valor < listaDiretorio.size();valor++)
    {
                if(listaDiretorio.get(valor).getCd_pai() == 0)
                {
                noPai = new DefaultMutableTreeNode(listaDiretorio.get(valor).getNome());
                tree = new JTree(noPai);
                jScrollPane2.setViewportView(tree);
                repaint();
                }
                else
                if(listaDiretorio.get(valor).getCd_pai() != 0)
                    {
                        noFilho = new DefaultMutableTreeNode(listaDiretorio.get(valor).getNome()); 
                        noPai.add(noFilho);
                    }
    }               
                
}


public Tela() {
    initComponents();
    criaArvore();
}[/code]

Desde já agradeço a ajuda :smiley:

Você pode utilizar o TreeNode para isso
É só adicionar o node com o respectivo elemento superior, ele se vira em saber quem é pai e quem é folha…

TreeNode node = new DefaultTreeNode(nome, meuPapai);

certo Xmio, mas e no caso de diretórios raiz (sem pai) como poderia cria-los usando esse TreeNode.

Obs: tentei usando ele e ainda sim ele subscreveu os diretórios raiz e não criou os diretórios filhos

Outra coisa como Instancio esse Objeto, o que eu tenho que importar alem do TreeNode? tentei usar esse método construtor DefaultTreeNode mas ele diz que não existe

Ve se ajuda…

[code]root = new DefaultTreeNode(“Root”, null);

doc = new DefaultTreeNode(“Documentos”, root);
arq = new DefaultTreeNode(“Arquivos”, root);
mus = new DefaultTreeNode(“Musicas”, root);

new DefaultTreeNode(“2012”, doc);
new DefaultTreeNode(“Agosto”, mus);[/code]

import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;

Mais uma vez obrigado Xmio, mas estranho, não consegui importar essas 2 classes não, o NetBeans não reconhece esse caminho org.primefaces.model

Você precisa instalar o primefaces em seu projeto!

Na implementação pode se basear nesse examplo: http://www.primefaces.org/showcase-labs/ui/treeTable.jsf