• 大小: 14KB
    文件类型: .java
    金币: 2
    下载: 1 次
    发布日期: 2021-05-10
  • 语言: Java
  • 标签: JTree  JAVA  

资源简介

该程序能够在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 < roots.length;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

评论

共有 条评论