資源簡介
該程序能夠在jFrame的窗口下顯示一棵文件樹,樹的節點與系統文件相對應,右鍵可以顯示菜單,節點有windows的圖標,非常好的一個java程序
代碼片段和文件信息
//只要點擊節點就會選中節點,如果是左擊且是目錄,不僅可以選中并添加子節點,還可以展開;如果是右擊,則可以選中,也添加子節點,但不展開
//只要選中節點,節點監視器就會考慮該節點是否是目錄,如果是目錄就會添加子節點
//由于java中沒有直接的copy文件操作,所以右鍵菜單項不設復制、剪切和黏貼,但是可以用拖動來實現剪切和黏貼
//------------------------------------
//圖標還沒有做
//運行可執行文件做了,但是對于空格的處理不理想
//鼠標右擊刪除已經完全做好了,重命名也做好了,打算不做new了在主界面上有new的按鈕
//但是最好事先主界面上new和文件樹的同步
//如果在該程序之外自行新建或刪除文件,將無法顯示,可以再下面添加一個刷新鍵
//------------------------------------
/*****
類?FileSystemView
FileSystemView?是?JFileChooser?的文件系統網關。由于?JDK1.1?File?API?不允許對諸如根分區、文件類型信息或隱藏文件位之類的信息進行訪問,
此類被設計成能夠直接獲得盡可能多的特定于?OS?的文件系統信息。?
FileSystemView
Icon?getSystemIcon(File?f)?
??????????在系統文件瀏覽器中顯示的文件、目錄或文件夾的圖標。?
**/
import?javax.swing.*;
import?javax.swing.tree.*;
import?java.awt.event.*;
import?java.awt.*;
import?javax.swing.event.*;
import?java.io.*;
import?java.io.File.*;
import?javax.swing.JOptionPane;
import?javax.swing.filechooser.FileSystemView;
public?class?MyTree?
{
Jframe?jf;
JTree?tree;
DefaultTreeModel?model;
PopupMenu?pop?=?new?PopupMenu();//右鍵菜單
MenuItem?deleteItem?=?new?MenuItem(“刪除“);
MenuItem?renameItem?=?new?MenuItem(“重命名“);
DefaultMutableTreeNode?root?=?new?DefaultMutableTreeNode(new?NodeData(null“我的電腦“));?
//-----用于重命名時生成一個原節點的克隆體-------
DefaultMutableTreeNode?aClone;
//----------------------------------------------
public?void?init()
{
jf?=?new?Jframe(“樹“);
File[]?roots?=?File.listRoots();//獲得系統根目錄文件
for(int?i?=?0;i? {
DefaultMutableTreeNode?node?=?new?DefaultMutableTreeNode(new?NodeData(roots[i]roots[i].getAbsolutePath()));
root.add(node);
}
tree?=?new?JTree(root);
model?=?(DefaultTreeModel)?tree.getModel();
//一次只能選中一個節點
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//設置使用定制的節點繪制器
tree.setCellRenderer(new?FolderRenderer());
//-------當用戶編輯完節點model將產生一個model事件進而通知事件監聽器節點已經修改了----
//e.path()?返回已更改節點的父節點的路徑。
//e.childIndices()?返回更改節點的索引。
model.addTreeModelListener(new?TreeModelListener()
{
public?void?treeNodesChanged(TreeModelEvent?e)
{
????//獲得編輯后的節點的父節點
DefaultMutableTreeNode?parent?=?(DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent());
DefaultMutableTreeNode?node;
int?index;
/*
*?If?the?event?lists?children?then?the?changed
*?node?is?the?child?of?the?node?we‘ve?already
*?gotten.??Otherwise?the?changed?node?and?the
*?specified?node?are?the?same.
*/
try?
{
index?=?e.getChildIndices()[0];
node?=?(DefaultMutableTreeNode)(parent.getChildAt(index));
//System.out.println(aClone.toString());
//克隆體更新名稱,file不變
((NodeData)aClone.getUserobject()).ChangeString(node.toString());
//刪除選定節點
model.removeNodeFromParent(node);
//添加克隆體
model.insertNodeInto(aCloneparentindex);
}?
catch?(NullPointerException?exc)?
{
System.out.println(“model?error“);
}
//系統實現改名
NodeData?data?=?(NodeData)?aClon
評論
共有 條評論