java - 我正在尝试获取 treeselectionlistner 上的文件夹路径。谁能帮我

标签 java jtree

我正在尝试获取 treeselectionlistner 上的文件夹路径。谁能帮我 。我想要在 JTree 中选择的文件夹的确切路径。

//第1类

公共(public)类 FileBrowser 实现 Runnable {

private DefaultMutableTreeNode root;

private DefaultTreeModel treeModel;

private JTree tree;

@Override
public void run() {
    JFrame frame = new JFrame("File Browser");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    File fileRoot = new File("C:\\JDeveloper\\Testing");
    root = new DefaultMutableTreeNode(new FileNodes(fileRoot));
    treeModel = new DefaultTreeModel(root);

    tree = new JTree(treeModel);
    tree.setCellRenderer(new DefaultTreeCellRenderer() {
        private Icon loadIcon = UIManager.getIcon("OptionPane.errorIcon");
        private Icon saveIcon = UIManager.getIcon("OptionPane.informationIcon");
        @Override
        public Component getTreeCellRendererComponent( JTree tree,
                                                       Object value,
                                                       boolean bSelected,
                                                       boolean bExpanded,
                                                       boolean bLeaf,
                                                       int iRow,
                                                       boolean bHasFocus ) {
            Component c = super.getTreeCellRendererComponent(tree, value,
                    bSelected, bExpanded, false, iRow, bHasFocus);

            return c;
        }
    });
    tree.setShowsRootHandles(true);
    tree.addTreeSelectionListener(new TreeSelectionListener() {
         public void valueChanged(TreeSelectionEvent e) {
           DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
               .getPath().getLastPathComponent();
           System.out.println("You selected " +node);
         }
       });
    JScrollPane scrollPane = new JScrollPane(tree);

    frame.add(scrollPane);
    frame.setLocationByPlatform(true);
    frame.setSize(640, 480);
    frame.setVisible(true);

    CreateChildNode ccn = new CreateChildNode(fileRoot, root);
    new Thread(ccn).start();
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new FileBrowser());
}

}

类 CreateChildNode 实现 Runnable {

private DefaultMutableTreeNode root;

private File currentFile;

public CreateChildNode(File currentFile, DefaultMutableTreeNode root) {
    this.currentFile = currentFile;
    this.root = root;
}

@Override
public void run() {
    createChildren(currentFile, root);
}

private void createChildren(File currentFile, DefaultMutableTreeNode node)
{
    File[] files = currentFile.listFiles();
    if ( files != null )
    {
        for( File file : files )
        {
            DefaultMutableTreeNode childNode = new DefaultMutableTreeNode( new FileNodes( file ) );
            if( file.isDirectory() )
            {
                node.add( childNode );
                createChildren( file, childNode );
            }
        }
    }
}

}

文件节点类{

private File file;

public FileNodes(File file) {
    this.file = file;
}
public File getFile() {
    return file;
}

@Override
public String toString() {
    String name = file.getName();
    if (name.equals("")) {
        return file.getAbsolutePath();
    } else {
        return name;
    }
}

}

最佳答案

请按如下方式更新TreeSelectionListener valueChanged()方法

tree.addTreeSelectionListener(new TreeSelectionListener() {
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
        FileNodes fileNode = (FileNodes)node.getUserObject();
        System.out.println("You selected " + fileNode.getFile().getAbsolutePath());
    }
});

关于java - 我正在尝试获取 treeselectionlistner 上的文件夹路径。谁能帮我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38590661/

相关文章:

java - 如何在群聊中显示消息和时间?

java - 是否有包含常用 Java 实体/类/Bean/数据结构的库/存储库/公共(public)站点? (最好是Java)

java - 我无法从数组输出中删除空值

java - 树节点中的动画 gif 图像

java - JTrees 的 Bean 绑定(bind)

java - 为什么 Android Studio 不识别 Base64.encodeBase64?

java - 在一个对象中存储多个数据值的更好方法是什么?

java - JTree:如何检查当前节点是否为文件

java - Java中Swing中右键单击节点添加弹出菜单

java - 在不重新绘制树的情况下更新 JTree 中的 ImageIcon?