JTree que não faz o Refresh

4 respostas
Douglas

Alguem tem alguma ideia para explicar por que quando se clica no botao "nova" a arvore não é "repintada" na tela? O botao "Excluir" funciona.
Observem tambem que depois de clicar em "nova" o botão excluir não funciona mais, mas isso é correto, pois o modelo foi refeito.... só não aparece na tela a mudança.

Sds

public class TesteTree extends JFrame {
    
    DefaultTreeModel modelTree = null;
    JTree tree =null;
    
    public TesteTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Paises");
        String[] paises = new String[]{"Brasil","Argentina","Paraguai","Venezuela"};
        
        for(int i = 0 ; i &lt paises.length; i ++) {
            root.add(new DefaultMutableTreeNode(paises[i]));
        }
                      
        modelTree = new DefaultTreeModel(root);        
        tree = new JTree(modelTree);        
        
        JButton btnExcluir = new JButton("Excluir");        
        btnExcluir.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                modelTree.removeNodeFromParent(selectedNode);
            }
        });
        
        JButton btnNova = new JButton("Nova");        
        btnNova.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {                
                DefaultMutableTreeNode novaRaiz = new DefaultMutableTreeNode("Nova arvore");
                modelTree = new DefaultTreeModel(novaRaiz);
                modelTree.reload(novaRaiz);
            }
        });
        
        JPanel pnlBotoes = new JPanel();                
        pnlBotoes.add(btnExcluir);
        pnlBotoes.add(btnNova);
        
        this.setLayout(new BorderLayout());
        this.add(tree, BorderLayout.CENTER);
        this.add(pnlBotoes,BorderLayout.SOUTH);
    }
    
    
    public static void main(String args[]) {
        TesteTree myTeste = new TesteTree();
        myTeste.setSize(new Dimension(400,300));
        myTeste.setVisible(true);
    }
    
}

4 Respostas

ViniGodoy

Para não passar raiva, implemente o seu próprio TreeModel.

Geralmente evita muitas dores de cabeça, além de gerar um código muito mais simples do que esse…

Douglas

Beleza ViniGodoy !

Mas o que eu tenho de fazer nele que não tem no DefaultTreeModel ? Voce teria algum exemplo?

Sds

ViniGodoy

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

Douglas

Assim funciona !

JButton btnNova = new JButton("Nova");        
btnNova.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {                
                 DefaultMutableTreeNode novaRaiz = new DefaultMutableTreeNode("Nova arvore");
                 modelTree = new DefaultTreeModel(novaRaiz);
                 tree.setModel(modelTree);
             }
         });

Como o modelTree agora aponta para outro objeto, tem que setar essa nova referencia para a JTree.

Vinicius, obrigado pelo link para o artigo da Sun.

Criado 12 de abril de 2007
Ultima resposta 13 de abr. de 2007
Respostas 4
Participantes 2