Java 单击树时如何从JTree获取节点路径?

Java 单击树时如何从JTree获取节点路径?,java,swing,selection,jtree,Java,Swing,Selection,Jtree,我有一个包含多个节点的树,还为此创建了一个树侦听器,现在我需要在单击它时获取特定的节点路径, 我试过这个代码,但没有得到确切的输出,有人能帮我吗 public class FTListener implements TreeSelectionListener { @Override public void valueChanged(TreeSelectionEvent e) { TreePath[] tree=new TreePath[e.getNewLead

我有一个包含多个节点的树,还为此创建了一个树侦听器,现在我需要在单击它时获取特定的节点路径, 我试过这个代码,但没有得到确切的输出,有人能帮我吗

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~]
这样做

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);
这样做

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
是一个优势,但我同意反对
重新发明轮子
@mKorbel我同意在很多情况下重用
DefaultMutableTreeNode
。但对于这个问题,没有任何迹象表明他/她正在使用
DefaultMutableTreeNode
实例,这使得这个答案太具体了。@Robin我同意,如果他使用对象作为treeNode,tree.getLastSelectedPathComponent().toString()就足够了。为什么要转换为
DefaultMutableTreeNode
?使用您自己的对象创建
JTree
是完全可能的。@Robin我认为
DefaultMutableXxx
是一个优势,但我同意反对
重新发明轮子
@mKorbel我同意在很多情况下重用
DefaultMutableTreeNode
。但是对于这个问题,没有任何迹象表明他正在使用
DefaultMutableTreeNode
实例,这使得这个答案太具体了。@Robin我同意,如果他使用对象作为treeNode,tree.getLastSelectedPathComponent().toString()就足够了。有什么问题吗?你选择了两条路径,它们都被打印出来,正如你所编码的:-)@kleopatra好消息是,一台电脑仍然完全按照我们所编码的那样工作。我会开始担心其他问题有什么问题?你选择了两条路径,它们都被打印出来,正如你所编码的:-)@kleopatra好消息是,一台电脑仍然完全按照我们所编码的那样工作。否则我会开始担心