Recarregar JTree

Pessoal, eu sei que esse assunto ja esta chato, mas estou com um problemao com a JTree aqui…
link de um artigo

http://www.guj.com.br/posts/list/37821.java

ta rodando beleza, acrescentando os valores, mas com apenas um problema… ele nao atualiza quando chamo o método novamente…


    void carregaPendencias() {
        try {

            String query = "";
            String subQuery = "";
            if (jCheckBox1.isSelected()) {
                subQuery = " TP_ENCARREGADO = '" + GeomapView.codigoUsuario + "' and ";
            }
            List<Projetos> projetos = new ArrayList<Projetos>();
            Projetos projeto;
            ResultSet rs1;
            Statement stmt1 = conn.createStatement();
            rs = stmt.executeQuery("SELECT TC_NOME, TC_RAZAO_SOCIAL from tab_projetos, tab_fazendas, tab_grupo_imoveis, tab_clientes WHERE " + subQuery + " TP_CODIGO = TGI_TP_CODIGO and TC_CODIGO = TP_CODIGO_CLIENTE and TF_CODIGO = TGI_TC_CODIGO and TP_VISIVEL = 1 and TF_VISIVEL=1 and TC_VISIVEL = 1 GROUP BY TC_NOME, TC_RAZAO_SOCIAL");
            rs.last();
            
            rs.beforeFirst();
            int x = 0;
            while (rs.next()) {

                if (rs.getString(1) == null | rs.getString(1).equals("")) {
                    
                    projeto = new Projetos(rs.getString(2));
                } else {
                    
                    projeto = new Projetos(rs.getString(1));
                }

              
                rs1 = stmt1.executeQuery("SELECT * FROM tab_fazendas, tab_grupo_imoveis, tab_projetos WHERE " + subQuery + " TF_CODIGO_CLIENTE = '" + utils.pegaCliente(rs.getString(1)) + "' and TGI_TC_CODIGO = TF_CODIGO and TP_CODIGO = TGI_TP_CODIGO and TP_VISIVEL = 1 and TF_VISIVEL = 1 GROUP BY TF_NOME");

                while (rs1.next()) {
 
                    projeto.addFazenda(new Fazendas(rs1.getString("TF_NOME"), rs1.getInt("TF_CODIGO")));
                }
                projetos.add(projeto);
                x++;
            
            }
 
            modelo = new ProjetoTreeModel(projetos);
 
                arvoreProjetos = new JTree(modelo);
   
                

            arvoreProjetos.setRootVisible(false);
            modelo.addTreeModelListener(new TreeModelListener() {

                public void treeNodesChanged(TreeModelEvent e) {
                    DefaultMutableTreeNode node;
  
                    System.out.println(e.getPath().toString());
                    System.out.println("The user has finished editing the node.");
                    //System.out.println("New value: " + node.getUserObject());
                }
                
                public void treeNodesInserted(TreeModelEvent e) {
                }

                public void treeNodesRemoved(TreeModelEvent e) {
                }

                public void treeStructureChanged(TreeModelEvent e) {
                }
            });



        } catch (Exception e) {
            System.out.println(e.getMessage());
        }


    }

O que devo fazer para que minha tree funcione corretamente? a parte de pesquisa parece estar ok, pois na primeira chamada ao método ela é preenchida corretamente!

Outra coisa, como posso adicionar um listener para escutar os comandos de mouse e teclado?

Agradeço muito! :-o
Obrigado

  1. Pare de usar o DefaultMutableTreeNode e entenda como funciona o TreeModel. Veja esse exemplo: http://www.guj.com.br/posts/list/37821.java#501820

  2. Entenda que eventos o model deve disparar, e para o que;

  3. Entenda como funciona a divisão de model e view/controller do Swing.

Sem isso, tudo fica mesmo muito complicado.

Opa Xará… blz?

Obrigado por responder…

sabe, eu nao to mais utilizando o DefaultMutableTreeNode, só esta ali dentro do listener pq nao sei como adicionar um listener utilizando seu exemplo…

é muito simples! esse método é chamado a cada vez que o usuario clicar em um botao. logo de inicio quando o programa inicia, esse metodo é chamado! Na primeira vez ele carrega o model e mostra na JTree, mas a partir dai nao atualiza mais… sei que isso tem haver com o treeStructureChanged(), mas nao sei implementar e utilizar o listener

espero que tenha entendido :S

obrigado, e parabens pelo tutorial!

Basta alterar o List do seu model e disparar um fireTreeStructureChanged. Isso já vai atualizar a tree inteira.
Se quiser, pode chamar o tree.repaint() mas dificilmente é necessário.

Certo…

quem deve disparar?

meu modelo nao tem essa propriedade (método) nem a Jtree

Desculpa minhas perguntas noobies, nunca mexi com JTree antes e ta muito complexo

Obrigado pela ajuda!

O seu modelo, da sua JTree. No outro post, deixei um AbstractTreeModel que tem esse evento implementado. Herde o seu modelo dele.

É, a JTree é um dos componentes mais complexos do Swing. Só perde para o TreeTable, que não é um componente padrão, mas que está descrito nos artigos da Sun.

Mas, não precisa pedir desculpa. O fórum é para isso mesmo. :wink:

Ja resolvi aqui…

valeu pela ajuda!!!

té +