java怎样把一个现有文件夹的结构创建成一个JTree

swing中我想遍历文件夹和里面的子文件,然后用JTree获得一个有目录结构的树,不知道怎么实现~

遍历方法:在java里面,文件和文件夹都由File对象表示,区分方法:file.isDirectory(),即文件对象是不是文件夹,如果是文件夹,则调用File[] listFiles = file.listFiles(),获取文件夹中的所有文件对象
有了遍历方法,JTree的生成就简单了,无非是在遍历过程中把文件对象按深度添加到树上罢了

一、jtree用法如下:
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

public class TreeDemo {
public static void main(String[] args) {

// 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
// public DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("软件部");
node1.add(new DefaultMutableTreeNode(new User("小花")));
node1.add(new DefaultMutableTreeNode(new User("小虎")));
node1.add(new DefaultMutableTreeNode(new User("小龙")));

DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("销售部");
node2.add(new DefaultMutableTreeNode(new User("小叶")));
node2.add(new DefaultMutableTreeNode(new User("小雯")));
node2.add(new DefaultMutableTreeNode(new User("小夏")));

DefaultMutableTreeNode top = new DefaultMutableTreeNode("职员管理");

top.add(new DefaultMutableTreeNode(new User("总经理")));
top.add(node1);
top.add(node2);
final JTree tree = new JTree(top);
JFrame f = new JFrame("JTreeDemo");
f.add(tree);
f.setSize(300, 300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加选择事件
tree.addTreeSelectionListener(new TreeSelectionListener() {

@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();

if (node == null)
return;

Object object = node.getUserObject();
if (node.isLeaf()) {
User user = (User) object;
System.out.println("你选择了:" + user.toString());
}

}
});
}
}

class User {
private String name;

public User(String n) {
name = n;
}

// 重点在toString,节点的显示文本就是toString
public String toString() {
return name;
}
}

package tmp;


import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Image;


import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.TreeNode;

import javax.swing.Icon;

import javax.swing.JSplitPane;

import javax.swing.JTree;

import javax.swing.JLabel;

import javax.swing.SwingUtilities;


import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.File;

import java.util.Arrays;


public class TestJTree extends JFrame {


private JPanel contentPane;

private Picture pic=null;

private String rootPath=TestJTree.class.getResource("/").getPath();

private JTree tree;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

TestJTree frame = new TestJTree();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}


/**

* Create the frame.

*/

public TestJTree() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setLayout(new BorderLayout(0, 0));

setContentPane(contentPane);

JSplitPane splitPane = new JSplitPane();

splitPane.setDividerLocation(120);

contentPane.add(splitPane, BorderLayout.CENTER);

MyTreeNode AA = new MyTreeNode(new File(rootPath+"AA"));

tree = new JTree(AA);

tree.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

if (SwingUtilities.isLeftMouseButton(e)&& e.getClickCount() == 1) {

MyTreeNode node = (MyTreeNode) tree.getLastSelectedPathComponent();

FileNode fn=(FileNode) node.getUserObject();

File f=fn.getFile();

if(!f.isDirectory()){

pic.loadPic(f.getAbsolutePath());

}

}

}

});

splitPane.setLeftComponent(tree);

pic=new Picture();

splitPane.setRightComponent(pic);

}


}

class MyTreeNode extends DefaultMutableTreeNode{

MyTreeNode(File file){

super(new FileNode(file));

FileNode fn=(FileNode)this.userObject;

File f=fn.getFile();

if(f.isDirectory()){

File[] fs=f.listFiles();

for(File ff:fs){

this.add(new MyTreeNode(ff));

}

}

}

}

class FileNode{

private String name;

private File file;

public FileNode(File file){

this.file=file;

name=file.getName();

}

public String toString(){

return name;

}

public String getName() {

return name;

}

public File getFile() {

return file;

}

}

class Picture extends JPanel {


private String picName;

public Picture(String picName){

this.picName=picName;

}

public Picture() {

}

public void paint (Graphics g) {

g.clearRect(0, 0, this.getWidth(), this.getWidth());

if(this.picName!=null){

Image image = this.getToolkit().getImage(picName); 

       g.drawImage(image, 0, 0, this); 

}

}

public void loadPic(String picName){

this.picName=picName;

repaint();

}

}

//界面编程经验不多,代码可能有诸多不当之处,见谅



一、jtree用法如下:

import javax.swing.JFrame;

import javax.swing.JTree;

import javax.swing.event.TreeSelectionEvent;

import javax.swing.event.TreeSelectionListener;

import javax.swing.tree.DefaultMutableTreeNode;

 

public class TreeDemo {

    public static void main(String[] args) {

 

        // 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。

        // public DefaultMutableTreeNode(Object userObject)

        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("软件部");

        node1.add(new DefaultMutableTreeNode(new User("小花")));

        node1.add(new DefaultMutableTreeNode(new User("小虎")));

        node1.add(new DefaultMutableTreeNode(new User("小龙")));

 

        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("销售部");

        node2.add(new DefaultMutableTreeNode(new User("小叶")));

        node2.add(new DefaultMutableTreeNode(new User("小雯")));

        node2.add(new DefaultMutableTreeNode(new User("小夏")));

 

        DefaultMutableTreeNode top = new DefaultMutableTreeNode("职员管理");

 

        top.add(new DefaultMutableTreeNode(new User("总经理")));

        top.add(node1);

        top.add(node2);

        final JTree tree = new JTree(top);

        JFrame f = new JFrame("JTreeDemo");

        f.add(tree);

        f.setSize(300, 300);

        f.setVisible(true);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 添加选择事件

        tree.addTreeSelectionListener(new TreeSelectionListener() {

 

            @Override

            public void valueChanged(TreeSelectionEvent e) {

                DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree

                        .getLastSelectedPathComponent();

 

                if (node == null)

                    return;

 

                Object object = node.getUserObject();

                if (node.isLeaf()) {

                    User user = (User) object;

                    System.out.println("你选择了:" + user.toString());

                }

 

            }

        });

    }

}

 

class User {

    private String name;

 

    public User(String n) {

        name = n;

    }

 

    // 重点在toString,节点的显示文本就是toString

    public String toString() {

        return name;

    }

}


二、运行效果如下:



http://www.java2s.com/Code/Java/File-Input-Output/DisplayafilesysteminaJTreeview.htm
http://www.java2s.com/Tutorial/Java/0240__Swing/JTreeDisplayingtheFileSystemHierarchyUsingtheCustomTreeModel.htm

java怎样把一个现有文件夹的结构创建成一个JTree
答:package tmp;import java.awt.BorderLayout;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Image;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import j...

如何把java项目文件夹放到自己的文件夹中
答:第一步:直接先创建一个java项目;第二步:将文件夹复制到java项目本地存储路径相应的src文件夹下。第三步:刷新eclipse中的java项目,即可完成”导入“操作,否则不是java项目的话,是没法导入的。

怎样用JAVA编写把一个文件夹中的文件复制到一个指定的文件夹用完文件后...
答:import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.util.StringTokenizer;...

java如何拷贝文件到另一个目录下
答:1、使用FileStreams复制 这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。正如你所看到的我们执行几个读和写操作try的数据,所以这应该是一个低...

java 如何拷贝整个目录,类似xcopy
答:字数有限制,只给你一个方法吧,大体思路就是递归调用的方式来实现 / 拷贝整个文件目录 param source 源目录、文件 param destination 目的目录、文件 / public static void copyFiles(File source, File ...

java如何拷贝一个文件夹内的多个指定的文件到另外一个指定的文件夹下...
答:你好:请看代码:/*** 把一个文件夹里的所有文件包括文件夹 一并原样拷贝到另一个目录中;*@author shuishui*/ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; ...

java 在指定的文件夹下创建一个新的文件夹
答:String newPath = path+"/newpath";//指定新路径 File file = new File(newPath );//定义一个文件流 file.mkdir();//创建文件夹 备注:如果不确定原有文件夹是否存在的情况下,可以通过”mkdirs“创建多层路径。

java 如何把一个目录下的所有.java文件复制到另一个目录下,并保持其结...
答:通过历遍当前文件夹下所有文件和文件夹信息,然后(处理文件夹自己去处理):File fold = new File( "c:\\test.properties ");String strNewPath = "c:\\testok\\ ";File fnewpath = ...

怎样用java在指定路径下创建一个文件夹
答:// 先创建文件所在的目录 f.getParentFile().mkdirs();try { // 创建新文件 f.createNewFile();} catch (IOException e) { System.out.println("创建新文件时出现了错误。。。");e.printStackTrace();} } } } ...

在使用jdk编译时,如何如何将一个JAVA源文件编译到一个指定的文件夹里面...
答:class文件编译后会存放在d盘根目录下 javac -d "d:\" D.java 执行临时设置classpath路径下的class java -classpath "d:\" D

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网