1

I am having trouble creating a TreeExpansionListener. I thought it could be as easy as a TreeSelectionListener. Unfortunately I cannot find the correct interface.

Here is my listener:

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);
    };
}

The error I receive is "incompatible types: TreeExpansionListener is not a functional interface. multiple non-overriding abstract methods found in TreeExpansionListener"

compaired to my TreeSelectionListener: private TreeSelectionListener createSelectionListener() { return (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);
        };
}

Am I going about this all wrong? Or am I missing something obvious?

Nina
  • 99
  • 12

1 Answers1

1

You can't use a lambda expression on a non-functional interface. A functional interface has only one abstract method.

TreeExpansionListener

TreeSelectionListener


private TreeExpansionListener createExpansionListener() {
   return new TreeExpansionListener(){
   // implement methods and do stuff...
   }
}
Murat Karagöz
  • 35,401
  • 16
  • 78
  • 107
  • So you are saying I cannot add another lambda expression to another non-functional interface? So I would have to expand it as `private TreeExpansionListener createExpansionListener(){DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); String data = node.getUserObject().toString(); System.out.println("Expanded: " + data);};` – Nina Nov 11 '15 at 11:55
  • K This indeed works. I fail to see why a lambda expression would not work, unless the functional interface is the tree and not the listener as i think. – Nina Nov 11 '15 at 12:37