【问题标题】:How to create a JTree ExpansionListener如何创建 JTree 扩展监听器
【发布时间】:2016-02-12 11:40:05
【问题描述】:

我无法创建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: 私有 TreeSelectionListener createSelectionListener() { 返回 (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);
        };
}

我做错了吗?还是我遗漏了一些明显的东西?

【问题讨论】:

    标签: java events jtree defaultmutabletreenode


    【解决方案1】:

    您不能在非功能接口上使用 lambda 表达式。一个函数式接口只有一个抽象方法。

    TreeExpansionListener

    TreeSelectionListener


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

    【讨论】:

    • 所以你是说我不能将另一个 lambda 表达式添加到另一个非功能接口?所以我必须将其扩展为private TreeExpansionListener createExpansionListener(){DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); String data = node.getUserObject().toString(); System.out.println("Expanded: " + data);};
    • K 这确实有效。我不明白为什么 lambda 表达式不起作用,除非功能接口是树而不是我认为的侦听器。
    猜你喜欢
    • 2013-11-30
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多