具体效果
效果如上图,左边边文件树用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


3043

被折叠的 条评论
为什么被折叠?



