【问题标题】:adding action listener for the node in a tree为树中的节点添加动作监听器
【发布时间】:2011-10-24 18:57:36
【问题描述】:

我无法将动作侦听器添加到树中的特定节点。这是我构建的一棵树:

我想为每个节点注册一个单独的监听器。现在我已经在JTree 上注册了一个听众。所以,每当我点击tree 的任何部分时,监听器方法都会启动它的工作。 (即现在我有一个共同的听众) 我想要的是,当我点击 audio 时,注册聆听音频点击的听众应该开始它的工作,视频也是如此。 我该怎么做?

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

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

【问题讨论】:

    标签: java swing events user-interface jtree


    【解决方案1】:

    这个呢。或者你有特殊的 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返回什么吗?医生说Returns the current lead path,但我不明白这是什么意思。
    • 还有方法getLastPathComponent。它实际上返回了什么?
    • JTree 中的TreePath 包含从树根开始的TreeNode 列表、根的子节点A、A 的子节点等。这些孩子的类型由底层的 TreeModel 决定。对于 DefaultTreeModel,它们是 TreeNode 对象。引导选择路径是具有焦点的节点的路径(至少在 BasicTreeUI 中),因此在您的情况下可能是用户单击的路径。该节点也是路径中的最后一个组件。
    【解决方案2】:

    您不能向树节点添加事件侦听器,因为表示树节点的类不是组件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      相关资源
      最近更新 更多