2015-11-11 73 views
1

我在創建TreeExpansionListener時遇到問題。我認爲它可以像TreeSelectionListener一樣簡單。不幸的是我找不到正確的界面。如何創建JTree ExpansionListener

這裏是我的聽衆:

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

我收到的錯誤是「不兼容類型:TreeExpansionListener是不是功能接口TreeExpansionListener發現多個非壓倒一切的抽象方法。」

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

我對這一切都錯了嗎?還是我錯過了明顯的東西?

回答

1

您無法在非功能接口上使用lambda表達式。一個功能接口只有一個抽象方法。

TreeExpansionListener

TreeSelectionListener


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

所以你說我不能在另一個lambda表達式添加到其他非功能性接口?所以我不得不把它擴展爲'private TreeExpansionListener createExpansionListener(){DefaultMutableTreeNode node =(DefaultMutableTreeNode)path.getLastPathComponent(); String data = node.getUserObject()。toString(); System.out.println(「Expanded:」+ data);};' – Nina

+0

@Nina看到我的編輯 –

+0

K這確實有效。我不明白爲什麼lambda表達式不起作用,除非功能接口是樹而不是我認爲的監聽器。 – Nina