JTree實現電腦資源管理器

来源:https://www.cnblogs.com/Lu-Yuyang/archive/2018/11/14/9955938.html
-Advertisement-
Play Games

0.前言 最近老師佈置了一項用Java寫資源管理器的任務,一開始以為簡單,但是實際操作起來,卻發現網上的資源用起來相對生疏。在使用中,我也遇到了許多問題,雖然不能像其他博主一樣,寫的非常齊全,但我還是分享一下我寫的代碼。 1.準備知識 JTree是樹形結構,是我們做資源管理器的必要組件。其構造函數的 ...


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 JFrame 
 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.setTitle("資源管理器");
 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 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文作者:陳明傑(sandyskies) Tars是騰訊從2008年到今天一直在使用的後臺邏輯層的統一應用框架,目前支持C++,Java,PHP,Nodejs,Golang語言。該框架為用戶提供了涉及到開發、運維、以及測試的一整套解決方案,幫助一個產品或者服務快速開發、部署、測試、上線。 它集可擴展 ...
  • 抽象工廠模式簡介,介紹了抽象工廠模式意圖,結構,產品族以及產品等級的概念,並且提供了代碼示例java版抽象工廠模式,抽象工廠模式與工廠模式的對比差異 ...
  • istio sidecar自動註入過程分析 sidecar自動註入檢查 istio通過 "mutating webhook admission controller" 機制實現sidecar的自動註入.istio sidecard在每個服務創建pod時都會被自動註入. 檢查kube apiserve ...
  • 系統架構設計師-需求 前言: 最近很久沒有發文章了。最近事情挺多的,也不知道該發那方面的內容。正好這兩天有空閑,就整理整理思緒,把一些總結髮表一下。 經過考慮後,先將軟考-架構相關的內容發出來,之後有時間,也會將一些額外的理論知識和經驗寫出來。 參考:《系統架構設計師考試全程指導》,《系統架構設計師 ...
  • 距離《 "重磅:Spring Boot 2.0 正式發佈!" 》已經過去大半年了,而 Spring Boot 2.1.0 在 10 月底就發佈了,我們來看下 Spring Boot 2.1.0 都更新了什麼,每一個 Java 技術人都值得關註。 棧長其實早就看到了更新了,現在才有時間來更新下。 1、 ...
  • 1、讀取cookies 2、將cookies保存在文件中 3、處理異常 URLError和HTTPError類,兩個類是父子關係,HTTPError會返回錯誤代碼,兩個類都可以處理request模塊產生的異常,這兩個都有一個reason屬性,用於記錄出現異常的原因 URLError處理異常: HTT ...
  • [TOC] 1.遷移 創建完模型類後,並沒有真正的在資料庫中創建了數據表,需要執行遷移命令,在數據表中創建數據表。 1.生成遷移文件 文件所在目錄執行命令 2.執行遷移命令 文件所在目錄執行命令 執行命令後到資料庫中查看是創建好了數據表。 添加測試數據 檢查資料庫中是否添加了數據。 ...
  • 我的博客: https://huangguangda.cn/ https://huangguangda.github.io/ 前言: 編碼解碼:編碼時將信息從一種形式變成為另一種形式,成為編碼.編碼為 ,逆過程為解碼.編碼時用代碼表示的,解碼為 ,有了編碼就有相關的編碼表,是對生活中的文件和電腦進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...