Hibernate + Jtree

7 respostas
R

Olá, tenho uma aplicação que uso relacionamento one to many no hibernate.
listo todos os dados em um Lista e quero popular tudo em uma JTree
como faço isso?

A estrutura da arvore é assim:

*Raiz
*Nivel 1
*Nivel 2
Nivel 3

7 Respostas

GusMcCart

Já implementou algum AbstractTableModel??? Nunca fiz algo parecido (JTree) mas pelo que imaginei do seu problema se já fez (AbstractTableModel) você vai entender… Dá uma olhada na interface javax.swing.tree.TreeModel;, procurei aqui e achei esses links:

http://www.java2s.com/Code/Java/Swing-JFC/implementsTreeModeltocreatetreemodel.htm

http://java.sun.com/products/jfc/tsc/articles/jtree/index.html

http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

Quanto à coleção que vc usou, se ajudar a Guava (Google) tem umas collections que acho que serão melhores no seu caso:

Se te ajudar e você conseguir solucionar, posta a solução aqui pra gnt!

R

Hum… eu vi isso, mas não estou conseguindo adaptar ao meu código.
:s
Na arvore aparece só o primeiro nivel dos dados que busco no banco :S
Sabe como posso arrumar isso?

GusMcCart

Você tem listas dentro de listas nesses níveis do plano de contas?
Pode implementar um método (recursivo talvez é uma boa) pra criar os nós das árvores, dentro da sua implementação do TreeModel, tipo isso aqui>

http://javafree.uol.com.br/artigo/4157/Introducao-ao-componente-JTree.html

Se vc só jogar no JTree fica tudo no root mesmo.

Acredito que usar um TreeSet ou TreeMap (ao invés de lista) fica melhor de implementar, pelo que vi tem uns métodos mais “árvore” do que “lista”

http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html
ou
http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

R
Ainda nao consegui, esta dando overflow... :S estou fazendo desse jeito:
public void varre(DefaultMutableTreeNode no) {  
         
	    for(int i = 0; i < lista.size(); i++){
	    	if(lista.get(i).getContas2().get(i).equals(null)){
	    		DefaultMutableTreeNode folha = new DefaultMutableTreeNode(lista.get(i).getContas2().get(i).getDescricao());
	    		no.add(folha);
	    	}else{
	    		System.out.println(1);
	    		DefaultMutableTreeNode folha = new DefaultMutableTreeNode(lista.get(i).getContas2().get(i).getDescricao());
	    		varre(folha);
	    		no.add(folha);
	    	}
	    }
		
	}

não tenho mais ideias :s

GusMcCart

Como está organizada a lista do plano de contas? Como o Hibernate ta te retornando isso? E a classe do plano de contas como tá? Posta ae

R

o plano de contas é assim:
raiz
—PLanoContas
-------PlanoContas2
-------PLanoContas2
------------PlanoContas3
—PlanoContas
-------PlanoContas2

no hibernate eu faço uma busca no PlanoContas e dela me retorna tudo :
Exemplo: lista.get(0).getContas2().get(0).getContas3().get(0).getDescricao();

é uma classe arramada na outra como List.
Esta me retornando os valores corretos mas não consigo jogar na avore

GusMcCart

Bom, tá meio estranho esse seu método… E também como você fez o mapeamento dos níveis, do que eu entendo de árvore teria de ser assim (por Exemplo):

PlanoContas
–PlanoContas
–PlanoContas
----PlanoContas
------PlanoContas
–PlanoContas

Aí dentro do método “varrer” você colocaria “se tiver algum filho, varre(filhos)” por exemplo… Dá uma revisada no código pra conseguir popular o JTree corretamente seguindo essa lógica de “árvore”.

Criado 20 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 7
Participantes 2