Как создать JTree ExpansionListener

У меня проблемы с созданием TreeExpansionListener, Я думал, что это может быть так же легко, как TreeSelectionListener, К сожалению, я не могу найти правильный интерфейс.

Вот мой слушатель:

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 найдено несколько неопределяемых абстрактных методов"

по сравнению с моим 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 ответ

Решение

Вы не можете использовать лямбда-выражение на нефункциональном интерфейсе. Функциональный интерфейс имеет только один абстрактный метод.

TreeExpansionListener

TreeSelectionListener


private TreeExpansionListener createExpansionListener() {
   return new TreeExpansionListener(){
   // implement methods and do stuff...
   }
}
Другие вопросы по тегам