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