Problema com JTree

Pessoal, estou querendo capturar o evento quando o usuário clicar em uma folha da JTree, a partir disso tenho que executar algumas ações. tipo: Se o cara clicar na folha “Músicas” da JTree deve abrir uma caixa de texto, seria +/- isso. O problema é que não estou conseguindo capturar essa folha, eu trato o evento de click na JTree, mas eu quero tratar o click em folhas específicas. Já li os tutoriais e não consegui. Se alguém puder me ajudar como capturar o click sobre a folha “Músicas”, “Livros”, “Fotos”… preciso capturar cada folha separadamente e executar suas respectivas ações.

grato!
flw

Dê uma olhada no códico abaixo…Ele está dentro do método que é disparado pelo clique do mouse, dentro do MouseListener que adicionoei à arvore…Neste código, se o usuário clicar duas vezes sobre um determinado nodo folha, eu obtenho o caminho (TreePath) deste nodo folha até a raiz, usando o método getPathForLocation(int x, int y), que retorna o nodo da árvore que se encontra em um determinado ponto (coordenada x e y obtidas da posição do clique do mouse, no meu caso)…A partir deste caminho, eu obtenho o último componente dele, o nosso nodo folha clicado. Por fim, obtenho deste nodo o objeto que ele encapsula, usando o getUserObject(). Perceba que este método retorna um Object, para processar corretamente as informações você dve fazer um casting (veja que no bloco try-catch eu trato uma ClassCastException)…

    if(evt.getClickCount()>=2) 
    {
        TreePath caminho = arvoreMostraAnotacoes.getPathForLocation(evt.getX(), evt.getY());
        
        try
        {
            Object objeto = (Anotacao)((DefaultMutableTreeNode)caminho.getLastPathComponent()).getUserObject();
        
            //faz qqer coisa com o objeto
        }
        catch(ClassCastException CCE){}
    }

Espero ter ajudado…

Consegui resolver meu problema ainda agora…

ControladorAcademia.academia.getJTreeCadastroGeral().addTreeSelectionListener(new TreeSelectionListener() {
		    public void valueChanged(TreeSelectionEvent e) {
		        DefaultMutableTreeNode node = (DefaultMutableTreeNode)ControladorAcademia.academia.getJTreeCadastroGeral().getLastSelectedPathComponent();

		        if (node.getUserObject().equals("Aluno")) {
		        	ControladorAcademia.academia.getJPanelCentro().removeAll();
					ControladorAcademia.academia.getJPanelCentro().add(ControladorAcademia.academia.getJInternalFrameCadastroAluno(), java.awt.BorderLayout.CENTER);
					ControladorAcademia.academia.getJInternalFrameCadastroAluno().setVisible(true);
					ControladorAcademia.academia.repaint();
		        }
		    }
		});

Porém tenho outro problema, quando clico na folha aluno o foco fica sobre ela, ou seja, ela fica selecionada, ai quando fecho o InternalFrame que eu exibo (como podem ver no codigo acima) e clico na folha “Aluno” novamente o InternalFrame não abre, mais isso pq essa folha estava selecionada, para abrir o InternalFrameCadastroAluno eu tenho q clicar em outra folha e depois clicar na folha “Aluno” novamente. Para resolver esse problema eu tenho q fazer com que a “Raiz” da JTree fique selecionada a cada click que for dado nas folhas da JTree, assim, com certeza meu problema se resolve, mas como fazer a Raiz ficar selecionada automaticamente? to quebrando a cabeça aqui…
quem puder me ajudar!!!

Grato,
flw

A minha solução permite contornar este teu problema, uma vez que ela atende a todo e qqer clique sobre os nodos da árvore, ao contrário da sua solução, que só é disparada quando o valor selecionado é trocado…

mas esse era meu problema o que eu queria era fazer isso, disparar o evento qdo fosse clicado em um nodo específico!!

mas valeu, ja resolvi.

flw