【问题标题】:how to get node path from JTree when tree is clicked?单击树时如何从JTree获取节点路径?
【发布时间】:2020-02-21 00:18:37
【问题描述】:

我有几个节点的树,还为此创建了一个树侦听器,现在我需要在单击时获取特定的节点路径, 我已经尝试过这段代码,但没有得到确切的输出,有人可以帮我吗?

public class FTListener implements TreeSelectionListener {


    @Override
    public void valueChanged(TreeSelectionEvent e) {
        TreePath[] tree=new TreePath[e.getNewLeadSelectionPath().getPathCount()];
        int i=0;

        tree=e.getPaths();

        for(TreePath tr:tree){
            System.out.println(tree[i]);
        i++;}

        //getPath() returns the array elements so i'm here using 
    //for loop for printing each elements.

这是输出

[/Desktop, /home/user/Desktop, /home/user/Desktop/1302677132563_USER_MANUAL_SMS_BANKING.pdf]
[/Desktop, /home/user/Desktop, /home/user/Desktop/Lab090C .java~]

【问题讨论】:

  • 有什么问题?您选择了两条路径,并且它们都被打印出来,就像您编码的那样:-)
  • @kleopatra PC 仍然完全按照我们的编码工作。否则我会开始担心

标签: java swing selection jtree


【解决方案1】:

这样做

public void valueChanged(TreeSelectionEvent e) {

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                       tree.getLastSelectedPathComponent();

    if (node == null) {
    //since Nothing is selected.     
     return;
    }

    Object nodeObject = node.getUserObject();
    System.out.println("Selected node : " + nodeObject);
}

如果您只想单选,请添加此选项

tree.getSelectionModel().setSelectionMode
        (TreeSelectionModel.SINGLE_TREE_SELECTION);

【讨论】:

  • 为什么要投到DefaultMutableTreeNode ?完全可以使用您自己的对象创建JTree
  • @Robin 我认为DefaultMutableXxx 是优势,但同意反对to reinvent the wheel
  • @mKorbel 我同意在很多情况下很容易重用DefaultMutableTreeNode。但在这个问题的情况下,没有任何迹象表明他/她正在使用 DefaultMutableTreeNode 实例,这使得这个答案过于具体。
  • @Robin 我同意,如果他使用对象作为treeNode,tree.getLastSelectedPathComponent().toString() 就绰绰有余了。
猜你喜欢
  • 2012-07-15
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2011-09-03
  • 2012-04-08
相关资源
最近更新 更多