Pessoal, estou implementando uma feramenta de Delivery de dados (importação/exportação de banco de dados). Na minha interface, os dados são exibidos em uma JTree. Esou tendo problemas com a utilização dela pois o sistema envolve algumas peculiaridades. Vamos lá ao problema: Na minha JTree são mostrados os registros pais e filhos das tabelas do banco de dados. Por exemplo, a tabela GRUPO_RELATORIO é pai da tabela RELATORIO, logo , quando existe um grupo de relatório chamado GRUPO_01 e um relatório RELATORIO_01 na base de dados que pertence a tal grupo eu mostro: GRUPO_1 -> RELATORIO_1 (em forma de árvore claro). Eu desejo que apenas sejam mostrados os registros filhos do “grupo” que eu selecionar e não dos outros que existirem, por questão de desempenho e quantidade de dados que pode existir, toda vez que eu vou expandir um “grupo” remonto toda a estrutura da árvore e preencho apenas os filhos do selecionado (utilizando o TreeExpansionListener.treeExpanded). Porém não consigo selecionar os filhos (relatorios), toda vez que clico em um relatorio ele lança novamente o evento de treeExpanded, mas eu apenas clico e ainda os relatorios são folhas. Por favor me ajudem. Caso seja dificil de entender me pergutem.
JTree e Banco de Dados
2 Respostas
public void treeExpanded(TreeExpansionEvent pEvent) {
/* Aqui eu remonto a estrutua da árvore. lCurrent é a tabela que será exportada. lPaths é o path selecionado na JTree (pEvent.getPath)*/
TreeStructure lTreeStruvture = DeliveryFacade.getInstance().getTreeStructureFromFile(lCurrent, lPaths);
/*Aqui eu pego os dados obtidos anteriormente e adiciono na JTree*/
DefaultMutableTreeNode lRoot = lRecordsPanel.getRootNode();
DefaultTreeModel lTreeModel = (DefaultTreeModel)lRecordsPanel.getRecordsTree().getModel();
lRoot.removeAllChildren();
Iterator lIterEntities = lTreeStructure.getEntities().iterator();
while (lIterEntities.hasNext()) {
EntityRecord lRecord = (EntityRecord) lIterEntities.next();
DefaultMutableTreeNode lTreeNode = new DefaultMutableTreeNode(lRecord);
if (lRecord.getChildren() == null || lRecord.getChildren().isEmpty()) {
lTreeNode.add(new DefaultMutableTreeNode());
} else {
Iterator lIterChildreen = lRecord.getChildren().iterator();
while (lIterChildreen.hasNext()) {
EntityRecord lEntityRecordChild = (EntityRecord) lIterChildreen.next();
lTreeNode.add(new DefaultMutableTreeNode(lEntityRecordChild));
}
}
lRoot.add(lTreeNode);
lTreeModel.reload(lTreeNode);
}
Olá
Desculpe não saber te ajudar… vi o seu tópico sobre a árvore…
Como vc está mais avançado q eu… rs Será q vc poderia me ajudar?
Tenho esse código que insere certinho nº do teclado na árvore binária, porém, qdo uso a mesma lógica, mas com um nº do banco de dados não insere e dá erro. Eu não sei mais o que mudar para dar certo? vc consegue enxergar o erro usando BD? P.S. O SELECT está certo.
public void insere(int chave) {
/* Cria uma nova célula para ser inserida na árvore. */
TU_celula novaCelula = new TU_celula(chave);
TU_celula atual = raiz;
while (atual != null) {//se a árvore não estiver vazia
/* Caso a chave seja menor do que a chave da célula atual. */
if (chave < atual.getChave()) {
/* Caso a célula atual não tenha filho esquerdo, a novaCelula é inserida à esquerda da célula atual e o método pára. */
if (atual.getCelulaEsquerda() == null) {
atual.setCelulaEsquerda(novaCelula);
return;
}
atual = atual.getCelulaEsquerda();
}
/* Caso a chave seja maior do que a chave da célula atual. */
else if (chave > atual.getChave()) {
/* Caso a célula atual não tenha filho direito, a novaCelula é inserida à direita da célula atual e o método pára. */
if (atual.getCelulaDireita() == null) {
atual.setCelulaDireita(novaCelula);
return;
}
atual = atual.getCelulaDireita();
}
/* Caso a chave já esteja contida na árvore, imprime uma mensagem na tela e o método pára. */
else {
System.out.println("Esta chave já está armazenada na árvore.");
return;
}
}
if (raiz == null) raiz = novaCelula;
}
A chamada correta do método de inserção é (que está correta):
TU_arvore_binaria arvoreBinaria = new TU_arvore_binaria();
System.out.print("\nDigite a chave a ser inserida: ");
chave = getDado(); //este método retorna a leitura do teclado do tipo int
arvore.insere(chave); //insere na árvore binária
System.out.println();
Porém, mudei agora para (que não está dando certo):
TU_arvore_binaria arvoreBinaria = new TU_arvore_binaria();
arvore.insere(resultado); /*resultado é um valor do BD já transformado p/ int*/

Mel