0.前言
最近老师布置了一项用Java写资源管理器的任务,一开始以为简单,但是实际操作起来,却发现网上的资源用起来相对生疏。在使用中,我也遇到了许多问题,虽然不能像其他博主一样,写的非常齐全,但我还是分享一下我写的代码。
1.准备知识
- JTree是树形结构,是我们做资源管理器的必要组件。其构造函数的参数可以是节点,或者模式。
- JTree只有放在JScrollPane里,才可以很好的显示
- JTree是通过节点操作来实现多层目录的。
- 一般使用DefaultMutableTreeNode来实现节点,可以通过add()函数,添加至其他节点。
2.思路
一开始的思路是用DFS深搜,但是实现后发现,相当的慢。
所以,我就想先写一个“我的电脑”节点,然后往下加磁盘分区,然后当我点击一个节点的时候(用事件监听,这里用到TreeSelectionListener),再往下展开(添加节点)
3.代码
等我用空再添加,不要急啊。
4.全部代码
目前只做到了显示目录,关于操作节点还未实现。
1 import java.awt.*; 2 import java.io.File; 3 4 import javax.swing.*; 5 import javax.swing.event.TreeExpansionEvent; 6 import javax.swing.event.TreeExpansionListener; 7 import javax.swing.event.TreeModelEvent; 8 import javax.swing.event.TreeModelListener; 9 import javax.swing.event.TreeSelectionEvent; 10 import javax.swing.event.TreeSelectionListener; 11 import javax.swing.tree.*; 12 13 public class Src_manage extends J 14 implements TreeSelectionListener { 15 private JTree tree = new JTree(); 16 private DefaultTreeModel treeModel; 17 private DefaultMutableTreeNode top; 18 19 public Src_manage() { 20 this.setLayout(new BorderLayout()); 21 this.add(createPC(), BorderLayout.CENTER); 22 this.add(createPW(), BorderLayout.WEST); 23 //设置窗体 24 this.setSize(550, 450); 25 this.setVisible(true); 26 this.set ("资源管理器"); 27 this.setResizable(false); // 设置不允许缩放 28 setLocationRelativeTo(null); // 窗口居中 29 setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗口点击关闭时,退出程序 30 } 31 /** 32 * 设置左边文件列表 33 * @return 34 */ 35 public JPanel createPW() { 36 JPanel pw = new JPanel(); 37 //设置模式 38 top = new DefaultMutableTreeNode("我的电脑"); 39 treeModel = new DefaultTreeModel(top); 40 //设置树 41 tree = new JTree(treeModel); 42 tree.setEditable(true); 43 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 44 tree.setShowsRootHandles(true); 45 //设置监听 46 tree.addTreeSelectionListener(this); 47 //设置节点 48 File roots[] = File.listRoots(); 49 for(int i=0; i<roots.length; i++) { 50 top.add(new DefaultMutableTreeNode(roots[i])); 51 } 52 53 //添加至面板 54 JScrollPane jsp = new JScrollPane(tree); 55 jsp.setPreferredSize(new Dimension(200, 405)); 56 pw.add(jsp); 57 58 return pw; 59 } 60 /** 61 * 设置右边文件显示 62 * @return 63 */ 64 public JPanel createPC() { 65 JPanel pc = new JPanel(); 66 return pc; 67 } 68 /** 69 * 创建节点 70 * @return 71 */ 72 public void createNode(File path, DefaultMutableTreeNode node) { 73 File childs[] = path.listFiles(); 74 for(int i=0; i<childs.length; i++) { 75 if(childs[i].isHidden()) 76 continue; 77 DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(childs[i].getName()); 78 treeModel.insertNodeInto(tmp, node, node.getChildCount()); 79 if(childs[i].isDirectory()) 80 tmp.add(new DefaultMutableTreeNode()); 81 } 82 } 83 /** 84 * 主函数 85 * @param args 86 */ 87 public static void main(String[] args) { 88 // TODO 自动生成的方法存根 89 new Src_manage(); 90 } 91 92 @Override 93 public void valueChanged(TreeSelectionEvent e) { 94 // TODO 自动生成的方法存根 95 //获取选择的节点 96 DefaultMutableTreeNode node = (DefaultMutableTreeNode) (e.getPath().getLastPathComponent()); 97 //若为根节点,跳出 98 if(node.isRoot()) 99 return; 100 //获取路径 101 TreeNode[] tp = node.getPath(); 102 String path = tp[1].toString(); 103 for(int i=2; i<tp.length; i++) { 104 path += tp[i] + "\\\\"; 105 } 106 //增加节点 107 createNode( new File(path), node); 108 } 109 }
继续阅读与本文标签相同的文章
上一篇 :
java中各种流的详细使用及编码解码介绍
-
Istio从懵圈到熟练 – 二分之一活的微服务
2026-05-19栏目: 教程
-
又一个里程碑,谷歌发布最新研究,机器学习开辟新篇章!
2026-05-19栏目: 教程
-
面对人工智能的发展,人类未来将扮演怎样的角色?
2026-05-19栏目: 教程
-
2019 DevOps 必备面试题——持续集成篇
2026-05-19栏目: 教程
-
从“人工智障”到“人工智能”,Siri开始说人话了!
2026-05-19栏目: 教程
