Erro ao mostrar ítem selecionado no jTree

3 respostas
marcosarantesj

Tenho a seguinte função para mostrar o nome do nó selecionado.

private void MostraTextodoNoSelecionado(){
          if(!jTree1.isSelectionEmpty()){
            DefaultMutableTreeNode no = (DefaultMutableTreeNode)
              jTree1.getLastSelectedPathComponent();

            JOptionPane.showMessageDialog(null,
          "Texto do ítem selecionado: " + no.toString(),
          "JTree", JOptionPane.INFORMATION_MESSAGE);

          }
        }

No evento MouseClick tenho chamo a função

private void jTree1MouseClicked(java.awt.event.MouseEvent evt) {
       MostraTextodoNoSelecionado();
       
    }

Só que retorna os erros:

run:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Classes.Grupos cannot be cast to javax.swing.tree.DefaultMutableTreeNode
        at gerenciadordeinformacoes.ifrmSplitPane.MostraTextodoNoSelecionado(ifrmSplitPane.java:276)
        at gerenciadordeinformacoes.ifrmSplitPane.jTree1MouseClicked(ifrmSplitPane.java:270)
        at gerenciadordeinformacoes.ifrmSplitPane.access$400(ifrmSplitPane.java:36)
        at gerenciadordeinformacoes.ifrmSplitPane$4.mouseClicked(ifrmSplitPane.java:165)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6270)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

3 Respostas

ViniGodoy

O erro não é claro? Está dizendo que o getLastPathComponent() não retorna um nó, e sim o conteúdo do nó. Um objeto da classe Classes.Grupos.

Então, é só fazer o cast direto:

private void MostraTextodoNoSelecionado(){
          if(!jTree1.isSelectionEmpty()){
            DefaultMutableTreeNode no = (Classes.Grupos)jTree1.getLastSelectedPathComponent();

            JOptionPane.showMessageDialog(null, "Texto do ítem selecionado: " + no.toString(),
              "JTree", JOptionPane.INFORMATION_MESSAGE);
          }
        }

Agora, melhor que usar DefaultMutableTreeNodes é criar um TreeModel, como esse aqui:
http://www.guj.com.br/posts/list/37821.java#501820

drsmachado
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Classes.Grupos cannot be cast to javax.swing.tree.DefaultMutableTreeNode

O problema está no cast que você está fazendo

DefaultMutableTreeNode no = (DefaultMutableTreeNode)   
              jTree1.getLastSelectedPathComponent();

Esta parte está com o erro.
Tenta verificar se é isto mesmo

marcosarantesj
O erro era na instância. Não era necessário instaciar. o código certo é somente o debaixo mesmo. Ao selecionar um  em uma folha, mostra os dados referentes a ele através de uma consulta SQL. Eu estou usando TableModel sim,  que esse código é somente para selecionar o  e mostrar os dados do  selecionado.

Object no = jTree1.getLastSelectedPathComponent();

noSelecionado=no.toString();

if(!jTree1.isSelectionEmpty() && jTree1.getModel().isLeaf(no)){

//        JOptionPane.showMessageDialog(null, "nome: "+no.toString());

MostraDadosdaInfo();
Criado 12 de novembro de 2010
Ultima resposta 16 de nov. de 2010
Respostas 3
Participantes 3