在树中为节点添加动作监听器

4

我无法为树中的特定节点添加操作监听器。这是我构建的一棵树:

enter image description here

我想为每个节点注册一个单独的监听器。现在我已经在 JTree 上注册了一个监听器。因此,无论我点击树的哪个部分,监听器方法都会开始工作。(即现在我有一个通用的监听器)

我想要的是当我点击 audio 时,应该启动一个注册用于侦听音频点击的监听器,并且对于视频也是同样的情况。 我该如何做到这一点?

这是我到目前为止注册的方式:

jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
        public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
            jTree1ValueChanged(evt);
        }
    });
public void jTree1ValueChanged( TreeSelectionEvent tse ) {...}
2个回答

7
这个怎么样?或者你有特殊的PathComponents吗?
public void jTree1ValueChanged( TreeSelectionEvent tse ) {
     String node = tse.getNewLeadSelectionPath().getLastPathComponent().toString();
    if( node.equals("audio") ) {
        // play audio
    } else if( node.equals("video") ) {
       // play video
    }
}

是的,它解决了我的问题。但是你能告诉我 getNewLeadSelectionPath 返回什么吗?文档说“返回当前导向路径”,但我不明白它的意思。 - Suhail Gupta
还有方法 getLastPathComponent。它实际上返回什么? - Suhail Gupta
3
在JTree中,TreePath包含从树根开始的TreeNode列表,其中包括根节点的一个子节点A、A的一个子节点等等。这些子节点的类型由底层的TreeModel确定。对于DefaultTreeModel而言,它们是TreeNode对象。lead selection path是指具有焦点的节点的路径(至少在BasicTreeUI中是如此),因此在您的情况下,可能是用户单击的节点。该节点也是路径中的最后一个组成部分。 - jackrabbit

0

你不能给树节点添加事件监听器,因为代表树节点的类不是组件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接