package exercise;import java.io.File;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;public class Jtree extends JFrame
{
private JScrollPane jsp; 
private JTree jtr;
private static DefaultMutableTreeNode root;

public Jtree()
{
init();
setBounds(50, 50, 500, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
File file=new File("d:\\homework");
root=new DefaultMutableTreeNode(file);
search(file, root);

} public void init()
{
jtr=new JTree(root);

jsp=new JScrollPane(jtr);
        add(jsp);
        
}

public static void   search(File file,DefaultMutableTreeNode node)
{
File[] f=file.listFiles();
for(int i=0;i<f.length;i++)
{
DefaultMutableTreeNode nodes=new DefaultMutableTreeNode(f[i].getName());
node.add(nodes);
if(f[i].isDirectory())
{
search(f[i],nodes);
}

}
} public static void main(String[] args)
{

new Jtree().setVisible(true);
}}

解决方案 »

  1.   


    package exercise;import java.io.File;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;public class Jtree extends JFrame
    {
    private JScrollPane jsp; 
    private JTree jtr;
    private static DefaultMutableTreeNode root;

    public Jtree()
    {
    setBounds(50, 50, 500, 800);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    File file=new File("d:\\1");
    root=new DefaultMutableTreeNode(file);
    search(file, root);
    init(); //最后创建JTree

    }

    public void init()
    {
    jtr=new JTree(root);

    jsp=new JScrollPane(jtr);
      add(jsp);
       
    }

    public static void search(File file,DefaultMutableTreeNode node)
    {
    File[] f=file.listFiles();
    for(int i=0;i<f.length;i++)
    {
    DefaultMutableTreeNode nodes=new DefaultMutableTreeNode(f[i].getName());
    node.add(nodes);
    if(f[i].isDirectory())
    {
    search(f[i],nodes);
    }

    }
    }

    public static void main(String[] args)
    {

    new Jtree().setVisible(true);


    }}
      

  2.   

    嗯  谢谢了   我是试过了  的确是   能告诉我为什么吗?自己调试 很不好调试出来啊 您是用的debug模式调试出来的么?
      

  3.   


    swing程序貌似是不能调试的,至少我目前还不知道有效的调试方法你的程序的原因是,如果你先init,那么你JTree显示的root和你实际的root不一样,因为你用root=new DefaultMutableTreeNode(file);改写了它的值
      

  4.   

    哦  了解    还有一个问题File file=new file("d:\\");怎么就不行了?
    我真正是想打印的是D盘下的所有文件 不是某个文件夹  一改成D:\\就出错啊
      

  5.   

    init();中
    jtr=new JTree(root);需要你root,开始root = null,看不到树
    要等到root先赋值,在运行 jtr = new JTree(root);
      

  6.   

    嗯  这个我已经知道了  现在的问题是怎么  File file=new File("d:\\"); 这样就不行 我想遍历d盘下的所有文件
      

  7.   


    import java.io.File;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;public class Jtree extends JFrame {
    private JScrollPane jsp;
    private JTree jtr;
    private static DefaultMutableTreeNode root; public Jtree() {

    setBounds(50, 50, 500, 800);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    File file = new File("D:\\");
    File[] fs = file.listFiles();
    System.out.println(fs.length);

    root = new DefaultMutableTreeNode(file);
    init();

    search(file, root);

    this.setVisible(true);
    } public void init() {
    jtr = new JTree(root);
    jsp = new JScrollPane(jtr);
    add(jtr);
    } public static void search(File file, DefaultMutableTreeNode node) {
    File[] f = file.listFiles();
    for (int i = 0; i < f.length; i++){
    DefaultMutableTreeNode nodes = new DefaultMutableTreeNode(
    f[i].getName());
    node.add(nodes);
    if (f[i].isDirectory()) {
    search(f[i], nodes);
    }
    else{//just here。加上这个没问题。。
    return;
    }
    }
    }
    public static void main(String args[]){
    new Jtree();
    }
    }
      

  8.   


    public static void search(File file, DefaultMutableTreeNode node) {
    File[] f = file.listFiles();
    if(f==null){
    return;
    }
    for (int i = 0; i < f.length; i++){
    DefaultMutableTreeNode nodes = new DefaultMutableTreeNode(
    f[i].getName());
    node.add(nodes);
    if (f[i].isDirectory()) {
    search(f[i], nodes);
    }
    }
    return;
    }
      

  9.   


    以前我也遇到过这个问题,我觉得主要是文件太多了,程序不可能一下子遍历完如果你要实现类似资源管理器的效果的话,最好一次只遍历当前目录下的文件,其它文件在你双击文件夹的时候通过TreeModelListener来显示
      

  10.   

    不是不是   问题找到了  可能是根目录下有隐藏的文件  java访问不了 所以要加判断如果是hide就continue,还有不能加return 一return就不循环了   我们还没遍历完呢  谢谢大家啊  搞定了!
    package exercise;import java.io.File;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;public class Jtree extends JFrame
    {
    private JScrollPane jsp; 
    private JTree jtr;
    private static DefaultMutableTreeNode root;

    public Jtree()
    {
    setBounds(50, 50, 500, 800);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    File file=new File("d:\\");
    root=new DefaultMutableTreeNode(file);
    search(file, root);
    init();

    } public void init()
    {
    jtr=new JTree(root);

    jsp=new JScrollPane(jtr);
            add(jsp);
            
    }

    public static void   search(File file,DefaultMutableTreeNode node)
    {
    File[] f=file.listFiles();
    for(int i=0;i<f.length;i++)
    {
    if(f[i].isHidden())continue;
    DefaultMutableTreeNode nodes=new DefaultMutableTreeNode(f[i].getName());
    node.add(nodes);
    if(f[i].isDirectory())
    {
    search(f[i],nodes);
    }
    // else 
    // {
    // return;
    // }

    }
    } public static void main(String[] args)
    {

    new Jtree().setVisible(true);
    }}