java大作业jtree文件树文件浏览器

具体效果

效果如上图,左边边文件树用jtree,右边用jtextarea

操作

上图是具体操作,实现了左右边同时交互。

难点

是文件树的建立,及进入路径时文件树的强调

文件树建立

这种只能用子目录而不能用电脑根目录,原因是目录太多,启动时会很慢,需要延迟加载,这个需要在研究一下,我就没搞。

    public static DefaultMutableTreeNode fileTree(File folder) {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(folder.getName());
        if (folder.list() != null) {
            for (String f : Objects.requireNonNull(folder.list())) {
                File tmp_f = new File(folder + "\\" + f);
                if (tmp_f.isFile()) {
                    // File的getName方法返回的是String,String有toString方法,所以可行,没有加上getName返回全路径,toSting和getName都能用
                    root.add(new DefaultMutableTreeNode(tmp_f.getName()));
                } else if (tmp_f.isDirectory()) {
                    root.add(fileTree(tmp_f));
                }
            }
        }
        return root;
    }

文件树强调

直接扩展jtree类

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import java.io.File;
import java.util.Objects;

public class FileTrees extends JTree {
//    private DefaultMutableTreeNode root;
    public FileTrees(DefaultMutableTreeNode node) {
        super(node);

    }
    public void findInTree(String str) {
        Object root = this.getModel().getRoot();
        TreePath treePath = new TreePath(root);
        treePath = findInPath(treePath, str);
        if (treePath != null) {
            this.setSelectionPath(treePath);
            this.scrollPathToVisible(treePath);
        }
    }
    public TreePath findInPath(TreePath treePath, String str) {
        Object object = treePath.getLastPathComponent();
        if (object == null) {
            return null;
        }

        String value = object.toString();
        if (str.equals(value)) {
            return treePath;
        } else {
            TreeModel model = this.getM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值