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