Java:目录结构的JTree组件

时间:2012-11-12 14:08:28

标签: java swing jtree

我在Java中有以下用于创建目录结构的代码。 代码工作正常
但我有一些疑问 对于目录结构,我检查扩展节点是目录或文件如果它是目录然后遍历它并添加文件和&该父目录的子目录 每次用户展开节点时我都会这样做。 目录是第一次遍历并向其添加节点时,这是正常的 但是当它第二次扩展时,代码将添加与第一次扩展ans相同的内容...... 但JTree包含的节点在目录中与它应包含的编码相同(目录内容*节点扩展的时间数)
这是如何维护我每次节点扩展时都会添加,我将节点作为第一次扩展 我犯了什么错误? 代码:

import java.io.*;    
import javax.swing.*;    
import javax.swing.tree.*;    
import java.awt.*;    
import java.awt.event.*;    
import java.util.*;    
import javax.swing.event.*;    
public class tree_drive    
{    
    JFrame frm;    
    JFileChooser file_c;    
    JTree f_tree;    
    public tree_drive(String path)    
    {    
        frm=new JFrame("Jtree Demo");       
        Container cp=frm.getContentPane();      
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        DefaultMutableTreeNode top = new DefaultMutableTreeNode(path);    
        f_tree=new JTree(top);    
        JScrollPane treeView = new JScrollPane(f_tree);    
        f_tree.addTreeSelectionListener(new TreeSelectionListener()    
        {    
            public void valueChanged(TreeSelectionEvent e)    
            {    
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)                                              f_tree.getLastSelectedPathComponent();    
                frm.setTitle("You hava selected : "+ node.toString());    
                    if (node != null)    
                {
                    File t_file=new File(node.toString());    
                    if(t_file.isDirectory())    
                    {    
                        try    
                        {    
                            for(File f : t_file.listFiles()) 
                            {    
                                if(f.isDirectory())   
                                {
    node.add(new DefaultMutableTreeNode(f.getPath()+File.separatorChar,true));  
                                }    
                                else    
                                {    
                node.add(new    DefaultMutableTreeNode(f.getName(),false));     
                                }    
                            }       

                        }    
                        catch(Exception ge)    
                        {   System.out.println(e);              

                        }                   
                    }    
                }    
            }    
        });    
        frm.add(treeView);    
        frm.setSize(500,500);    
        frm.setVisible(true);    
        frm.pack();         
    }    
    public static void main(String ...t)    
    {       
        try    
        {    
            new tree_drive(t[0]);           
        }    
        catch(Exception e)    
        {    
            System.out.println("Plese Specify path from Command line");    
        }           
    }    
}

Output :

0 个答案:

没有答案