Preciso de ajuda com o JTree do java, help me please
8 respostas
java
L
Leonardo_Santos3
Estou tentando adicionar dados no meu JTree, sei como adicionar diretamente, mas o que eu quero é que o JTree pegue os dados da minha classe com um simples get mesmo. É possível?
Uso o a versão mais recente do eclipse. Segue o meu código do JTree.
Se você consegue adicionar manualmente um por um, para isso sempre é usado o mesmo bloco de código, se são vários valores e quer simplificar, monte uma lista com os dados desejados e faça um laço de repetição para percorrer a lista e acionar a criação do JTree de acordo com sua necessidade.
L
Leonardo_Santos3
Como ficaria o código? E como eu pego os dados da classe e jogo no JTree?
F
FearX
Ele te deu o caminho. Para aprender, você tem que usar o caminho para chegar no código. Se você obter um código pronto toda vez que surgir uma dúvida, você não vai aprender a programar, e sim a copiar e colar.
Tente descobrir como resolver! Vai te agregar muito, pode ter certeza.
S
staroski1 like
Sim, é possível, implemente o seu próprio TreeModel para fazer isso.
Como é a estrutura da sua classe que fornece os dados?
L
Leonardo_Santos3
Por enquanto eu tenho uma classe bem simples, no final a ideia é pega essa disciplina do banco de dados, mas aprendendo como pegar da classe já vai ajudar bastante.
Esses são os métodos da classe:
Eu sei que sim, mas tô com tanta coisa pra fazer. Já tentei achar, pesquisei e tudo, mas tá complicado.
Tudo que quero é um simples comando pra pegar dados da classe e adicionar no JTree, todo programador já se deparou com algo assim e veio pro fórum pedir um help, não custa ajudar.
S
staroski1 like
Supondo que você tenha uma classe Periodo com a seguinte estrutura:
Você pode implementar dois TreeNode utilizando duas inner classes:
uma para ser o elemento raíz e renderizar a lista de períodos
outra para renderizar cada período ou cada disciplina
Veja a tela de exemplo abaixo:
importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Dimension;importjava.util.LinkedList;importjava.util.List;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTree;importjavax.swing.UIManager;importjavax.swing.tree.DefaultMutableTreeNode;importjavax.swing.tree.DefaultTreeModel;importjavax.swing.tree.TreeModel;importjavax.swing.tree.TreeNode;@SuppressWarnings("serial")publicclassTelaExemploextendsJFrame{/** * Ponto de entrada do programa */publicstaticvoidmain(String[]args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());TelaExemplotela=newTelaExemplo();tela.setDefaultCloseOperation(EXIT_ON_CLOSE);tela.setLocationRelativeTo(null);tela.setVisible(true);}catch(Throwablet){t.printStackTrace();}}/** * Um TreeNode raíz para a lista de períodos */privateclassTreeNodeRaizextendsDefaultMutableTreeNode{privateList<Periodo>periodos;TreeNodeRaiz(List<Periodo>periodos){super("Períodos");this.periodos=periodos;}@OverridepublicTreeNodegetChildAt(intindex){if(periodos.isEmpty()){returnnull;}Periodoperiodo=periodos.get(index);returnnewTreeNodeFilho(periodo);}@OverridepublicintgetChildCount(){returnperiodos.size();}@OverridepublicbooleanisLeaf(){returnperiodos.isEmpty();}}/** * Um TreeNode filho que serve tanto para cada periodo quanto para cada disciplina */privateclassTreeNodeFilhoextendsDefaultMutableTreeNode{TreeNodeFilho(Objectconteudo){super(conteudo);}@OverridepublicTreeNodegetChildAt(intindex){if(isLeaf()){returnnull;}Periodoperiodo=(Periodo)getUserObject();List<Disciplina>disciplinas=periodo.getDisciplinas();Disciplinadisciplina=disciplinas.get(index);returnnewTreeNodeFilho(disciplina);}@OverridepublicintgetChildCount(){if(isLeaf()){return0;}Periodoperiodo=(Periodo)getUserObject();List<Disciplina>disciplinas=periodo.getDisciplinas();returndisciplinas.size();}@OverridepublicbooleanisLeaf(){Objectconteudo=getUserObject();if(conteudoinstanceofDisciplina){returntrue;}Periodoperiodo=(Periodo)conteudo;returnperiodo.getDisciplinas().isEmpty();}@OverridepublicStringtoString(){Objectconteudo=getUserObject();if(conteudoinstanceofDisciplina){Disciplinadisciplina=(Disciplina)conteudo;returndisciplina.getDescricao();}Periodoperiodo=(Periodo)getUserObject();returnperiodo.getDescricao();}}/** * Construtor da tela */publicTelaExemplo(){super("Tela de Exemplo");Dimensiontamanho=newDimension(640,480);setMinimumSize(tamanho);List<Periodo>periodos=carregarPeriodos();TreeNoderaiz=newTreeNodeRaiz(periodos);TreeModeltreeModel=newDefaultTreeModel(raiz);JTreetree=newJTree(treeModel);JScrollPanescrollPane=newJScrollPane(tree);Containercontainer=getContentPane();container.setLayout(newBorderLayout());container.add(scrollPane,BorderLayout.CENTER);}/** * Aqui você vai implementar a inicialização dos períodos e disciplinas lendo do seu banco de dados. */privateList<Periodo>carregarPeriodos(){Periodoperiodo1=newPeriodo("1\u00BA Periodo");periodo1.getDisciplinas().add(newDisciplina("Disciplina 1"));periodo1.getDisciplinas().add(newDisciplina("Disciplina 2"));Periodoperiodo2=newPeriodo("2\u00BA Periodo");periodo2.getDisciplinas().add(newDisciplina("Disciplina 3"));periodo2.getDisciplinas().add(newDisciplina("Disciplina 4"));Periodoperiodo3=newPeriodo("3\u00BA Periodo");periodo3.getDisciplinas().add(newDisciplina("Disciplina 5"));periodo3.getDisciplinas().add(newDisciplina("Disciplina 6"));List<Periodo>periodos=newLinkedList<>();periodos.add(periodo1);periodos.add(periodo2);periodos.add(periodo3);returnperiodos;}}
L
Leonardo_Santos31 like
Nossa cara valeu mesmo, ajudou bastante. Tava super preso nisso faz uns dias. Valeu mesmo