2015-11-11 1 views
1

J'ai des difficultés à créer un TreeExpansionListener. Je pensais que cela pourrait être aussi facile qu'un TreeSelectionListener. Malheureusement, je ne peux pas trouver l'interface correcte.Comment créer un JTree ExpansionListener

Voici mon auditeur:

private TreeExpansionListener createExpansionListener() { 
    return (TreeExpansionEvent event) -> { 
     TreePath path = event.getPath(); 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); 
     String data = node.getUserObject().toString(); 
     System.out.println("Expanded: " + data); 
    }; 
} 

L'erreur que je reçois est "types incompatibles: TreeExpansionListener n'est pas une interface fonctionnelle de multiples méthodes abstraites non prépondérants trouvées dans TreeExpansionListener."

compaired à mon TreeSelectionListener : privé TreeSelectionListener createSelectionListener() { retour (TreeSelectionEvent e) -> {

 node = (DefaultMutableTreeNode) template_tree.getLastSelectedPathComponent(); 
     if ((node == null){ 
      return; 
     } else { 
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); 
     String data = node.getUserObject().toString(); 
     System.out.println("Expanded: " + data); 
     }; 
} 

Est-ce que je vais tout à fait faux? Ou est-ce que je manque quelque chose d'évident?

Répondre

1

Vous ne pouvez pas utiliser une expression lambda sur une interface non fonctionnelle. Une interface fonctionnelle n'a qu'une seule méthode abstraite.

TreeExpansionListener

TreeSelectionListener


private TreeExpansionListener createExpansionListener() { 
    return new TreeExpansionListener(){ 
    // implement methods and do stuff... 
    } 
} 
+0

Donc vous dites que je ne peux pas ajouter une autre expression lambda à une autre interface non-fonctionnelle? Donc je devrais l'étendre en tant que privateExpansionListener createExpansionListener() {DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); Chaîne de données = node.getUserObject(). ToString(); System.out.println ("Expanded:" + data);}; ' – Nina

+0

@Nina voir mon édition –

+0

K Cela fonctionne en effet. Je ne vois pas pourquoi une expression lambda ne fonctionnerait pas, à moins que l'interface fonctionnelle soit l'arbre et non l'auditeur comme je le pense. – Nina