我想在一个panel中添加一块类似ECLIPSE中的文件树,请问怎样才能办到。

解决方案 »

  1.   

    用JTree,然后向里面插入节点
      

  2.   

    /**
       @version 1.02 2004-08-21
       @author Cay Horstmann
    */import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;/**
       This program demonstrates tree editing.
    */
    public class TreeEditTest
    {  
       public static void main(String[] args)
       {  
          JFrame frame = new TreeEditFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    }/**
       A frame with a tree and buttons to edit the tree.
    */
    class TreeEditFrame extends JFrame
    {  
       public TreeEditFrame()
       {  
          setTitle("TreeEditTest");
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);      // construct tree      TreeNode root = makeSampleTree();
          model = new DefaultTreeModel(root);
          tree = new JTree(model);
          tree.setEditable(true);      // add scroll pane with tree      JScrollPane scrollPane = new JScrollPane(tree);
          add(scrollPane, BorderLayout.CENTER);      makeButtons();
       }   public TreeNode makeSampleTree()
       {  
          DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");
          DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
          root.add(country);
          DefaultMutableTreeNode state = new DefaultMutableTreeNode("California");
          country.add(state);
          DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose");
          state.add(city);
          city = new DefaultMutableTreeNode("San Diego");
          state.add(city);
          state = new DefaultMutableTreeNode("Michigan");
          country.add(state);
          city = new DefaultMutableTreeNode("Ann Arbor");
          state.add(city);
          country = new DefaultMutableTreeNode("Germany");
          root.add(country);
          state = new DefaultMutableTreeNode("Schleswig-Holstein");
          country.add(state);
          city = new DefaultMutableTreeNode("Kiel");
          state.add(city);
          return root;
       }   /**
          Makes the buttons to add a sibling, add a child, and
          delete a node.
       */
       public void makeButtons()
       {
          JPanel panel = new JPanel();
          JButton addSiblingButton = new JButton("Add Sibling");
          addSiblingButton.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   DefaultMutableTreeNode selectedNode
                      = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();               if (selectedNode == null) return;               DefaultMutableTreeNode parent
                      = (DefaultMutableTreeNode) selectedNode.getParent();               if (parent == null) return;               DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");               int selectedIndex = parent.getIndex(selectedNode);
                   model.insertNodeInto(newNode, parent, selectedIndex + 1);
             
                   // now display new node
                   
                   TreeNode[] nodes = model.getPathToRoot(newNode);
                   TreePath path = new TreePath(nodes);
                   tree.scrollPathToVisible(path);
                }
             });
          panel.add(addSiblingButton);      JButton addChildButton = new JButton("Add Child");
          addChildButton.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
                      tree.getLastSelectedPathComponent();               if (selectedNode == null) return;               DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");
                   model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());               // now display new node
                   
                   TreeNode[] nodes = model.getPathToRoot(newNode);
                   TreePath path = new TreePath(nodes);
                   tree.scrollPathToVisible(path);
                }
             });
          panel.add(addChildButton);      JButton deleteButton = new JButton("Delete");
          deleteButton.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   DefaultMutableTreeNode selectedNode
                      = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();               if (selectedNode != null && selectedNode.getParent() != null)
                      model.removeNodeFromParent(selectedNode);
                }
             });
          panel.add(deleteButton);
          add(panel, BorderLayout.SOUTH);
       }   private DefaultTreeModel model;
       private JTree tree;
       private static final int DEFAULT_WIDTH = 400;
       private static final int DEFAULT_HEIGHT = 200;
    }
      

  3.   

    LS能否具体点?遍历文件后加入结点吗,我不大会用JTREE
      

  4.   

    以前写的
    package squall.pattern.mvc;import java.io.File;import javax.swing.tree.DefaultMutableTreeNode;
    /**
     * @author java
     *
     * TODO 要更改此生成的类型注释的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
    public class MyTreeNode extends DefaultMutableTreeNode
    {
        
        /**
         * 
         */
        public MyTreeNode()
        {
            super();
            // TODO 自动生成构造函数存根
        }
        /**
         * @param userObject
         */
        public MyTreeNode(Object userObject)
        {
            super(userObject);
            // TODO 自动生成构造函数存根
        }
        /**
         * @param userObject
         * @param allowsChildren
         */
        public MyTreeNode(Object userObject, boolean allowsChildren)
        {
            super(userObject, allowsChildren);
            // TODO 自动生成构造函数存根
        }
        
        public String toString()
        {
            return ((File)this.userObject).getName();
        }
        
        public boolean isLeaf()
        {
            return !(((File)this.userObject).isDirectory());
        }
    }
    package squall.pattern.mvc;import java.awt.BorderLayout;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.File;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.event.TreeExpansionEvent;
    import javax.swing.event.TreeExpansionListener;
    import javax.swing.event.TreeWillExpandListener;
    /**
     * @author java
     *
     * TODO 要更改此生成的类型注释的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
    public class Tree
    {
    public static void main(String [] args)
    {
    TreeFrame frame = new TreeFrame("Tree");
    frame.setSize(1024,768);
    frame.setVisible(true);
    }
    }class TreeFrame extends JFrame
    {
        public TreeFrame(String title)
        {
            super(title);
            
            JScrollPane jsp = new JScrollPane();
            TreePanel panel = new TreePanel();
            jsp.getViewport().add(panel);
    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(jsp,BorderLayout.WEST);
    addWindowListener(new WindowAdapter() 
    {
                public void windowClosing(WindowEvent evt) 
                {
                    setVisible(false);
                    dispose();
                    System.exit(0);
                }
            });
        }
    }class TreePanel extends JPanel
    {
        
        
        
        
        private MyTreeNode root = null;
        
       
        
        private JTree jtree = null;
        
        
        private void addAllFile(File file, MyTreeNode node)
        {
            if(file == null && node == null)
            {
                file = new File("C:/");
                node = new MyTreeNode(file);
                root = node;
            }
            if(file.isDirectory())
            {
                File[] files = file.listFiles();
                if(files == null)
                {
                    return;
                }
                else
                {
            for(int i = 0; i < files.length; ++i)
            {
                MyTreeNode newnode = new MyTreeNode(files[i]);
                node.add(newnode);
                //addAllFile(files[i],newnode);
                
            }
                }
            }
            else
            {
                return;
            }
        }
        
        public TreePanel()
        {
            addAllFile(null,null);
            jtree = new JTree(root);
            jtree.addTreeWillExpandListener(new TreeWillExpandListener()
                    {
                 public void treeWillExpand(TreeExpansionEvent event)
                 {
                     MyTreeNode node =(MyTreeNode) event.getPath().getLastPathComponent();
                     File nodefile = (File) node.getUserObject();
                     File[] files =nodefile.listFiles();
                     if(files != null)
                     {
                         for(int i = 0; i < files.length; ++i)
                         {
                             MyTreeNode addnode = new MyTreeNode(files[i]);
                             node.add(addnode);
                         }
                     }
                     jtree.repaint();
                 }
                
                 public void treeWillCollapse(TreeExpansionEvent event)
                 {
                     jtree.repaint();
                 }
                    });
            jtree.addTreeExpansionListener(new TreeExpansionListener()
                    {
                 public void treeExpanded(TreeExpansionEvent event)
                 {
                     jtree.repaint();
                 }
                
                 public void treeCollapsed(TreeExpansionEvent event)
                 {
                     jtree.repaint();
                 }
                    });
            add(jtree);
        }
    }