求教Jtree的使用方法 (添加 删除 修改),
 最好有完整的例子,谢了.

解决方案 »

  1.   

    %JAVA_HOME%\demo\jfc\SwingSet2,基本包括swing所有的组件
      

  2.   

    import javax.swing.*;import javax.swing.tree.*;import java.awt.event.*;public class myTree extends JFrame{        JTree tree=null;        DefaultTreeModel model=null;        DefaultMutableTreeNode root=new DefaultMutableTreeNode("Root");        public myTree()        {                tree=new JTree(root);                model=(DefaultTreeModel)tree.getModel();                for(int i=0;i<10;i++)                {                        DefaultMutableTreeNode subNode=new DefaultMutableTreeNode("Node"+new Integer(i),true);                        root.add(subNode);                }                tree.addMouseListener(new java.awt.event.MouseAdapter()                 {            public void mousePressed(MouseEvent e) {                tree1_mousePressed(e);            }        });                this.getContentPane().add(tree);                this.setSize(100,300);                this.setVisible(true);                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        }                void tree_mousePressed(MouseEvent e)                 {                        TreePath path = tree.getPathForLocation(e.getX(),e.getY());                        tree.setSelectionPath(path);         }        public static void main(String[] args)        {                new myTree();        }}
      

  3.   

    /**
     *Swing中,树由扩展JComponent的JTree类来实现的。
     *使用JTree的最简单和最常用的方法是创建类型为DefaultMutableTreeNode的对象,以作为树的节点
     *没有子节电的的节点显示为叶
     */
     /**
      *DefaultMutableTreeNode root=new DefaultMutableTreeNode("根");
      *DefaultMutableTreeNode child1=new DefaultMutableTreeNode("子树1");
      *DefaultMutableTreeNode child2=new DefaultMutableTreeNode("子树2");
      *root.add(child1);
      *root.add(child2);
      *JTree tree=new JTree(root);
      *getContentPane().add(new JScrollPane(tree));
      */
     import javax.swing.*;
     import java.awt.*;
     import java.awt.event.*;
     import javax.swing.tree.*;
     //选择一个字符串数组,使第一个元素成为节点,其余的元素成为叶
     class Branch
     {
      DefaultMutableTreeNode r;
      Branch(String data[])
      {
      r=new DefaultMutableTreeNode(data[0]);
      for(int i=1;i<data.length;i++)
      r.add(new DefaultMutableTreeNode(data[i]));
      }
      public DefaultMutableTreeNode node()
      {
      return r;
      }
     }
     
     public class JTreeDemo extends JFrame
     {
      String[][]data={{"颜色","红色","蓝色","绿色"},
      {"风味","酸","甜","温和"},
      {"长度","短","中","长"},
      {"音量","高","中","低"},
      {"温度","高","中","低"},
      {"强度","高","中","低"}
      };
      static int i=0;
      DefaultMutableTreeNode root,child,chosen;
     
      JTree tree;
      DefaultTreeModel model;
     
      JTreeDemo()
      {
      Container cp=getContentPane();
      //创建树结构
      root=new DefaultMutableTreeNode("根");
      tree=new JTree(root);
      //添加它并使它完成滚动的操作
      cp.add(new JScrollPane(tree),BorderLayout.CENTER);
      //捕获树的模型
      model=(DefaultTreeModel)tree.getModel();
     
      JButton test=new JButton("添加");
      test.addActionListener(new ActionListener()
      {
     
      public void actionPerformed(ActionEvent e)
      {
      //构造Branch,并返回DefaultMutableTreeNode
      if (i<data.length)
      child=new Branch(data[i++]).node();
     
      //最后点击的是什么,获得最后点击的节点
      chosen=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
      if(chosen==null)
      chosen=root;
     
      //将新节点放置在当前节点上,在chosen上添加子节点child
      model.insertNodeInto(child,chosen,0);
     
      }
      });
      //修改按钮的颜色
      test.setBackground(Color.blue);
    test.setForeground(Color.white);
    JPanel p=new JPanel();
    p.add(test);
    cp.add(p,BorderLayout.SOUTH); 
      }
      public static void main(String args[])
      {
    JTreeDemo jj=new JTreeDemo();
    jj.pack();
    jj.show(); 
      }
     }
      

  4.   

    谢谢 chao_bsc_002(潮儿) 
    但是关于节点的删除及修改部分的代码呢.
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;public class TreeEditTest
    {  public static void main(String[] args)
       {  JFrame frame = new TreeEditFrame();
          frame.show();
       }
    }class TreeEditFrame extends JFrame
       implements ActionListener
    {  public TreeEditFrame()
       {  setTitle("TreeEditTest");
          setSize(300, 200);
          addWindowListener(new WindowAdapter()
             {  public void windowClosing(WindowEvent e)
                {  System.exit(0);
                }
             } );      // construct tree      TreeNode root = makeSampleTree();
          model = new DefaultTreeModel(root);
          tree = new JTree(model);
          tree.setEditable(true);      // add scroll pane with tree to content pane      Container contentPane = getContentPane();
          JScrollPane scrollPane = new JScrollPane(tree);
          contentPane.add(scrollPane, "Center");      // make button panel      JPanel panel = new JPanel();
          addSiblingButton = new JButton("Add Sibling");
          addSiblingButton.addActionListener(this);
          panel.add(addSiblingButton);
          addChildButton = new JButton("Add Child");
          addChildButton.addActionListener(this);
          panel.add(addChildButton);
          deleteButton = new JButton("Delete");
          deleteButton.addActionListener(this);
          panel.add(deleteButton);
          contentPane.add(panel, "South");
       }   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("Cupertino");
          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;
       }   public void actionPerformed(ActionEvent event)
       {  DefaultMutableTreeNode selectedNode
             = (DefaultMutableTreeNode)
                tree.getLastSelectedPathComponent();      if (selectedNode == null) return;      if (event.getSource().equals(deleteButton))
          {  if (selectedNode.getParent() != null)
                model.removeNodeFromParent(selectedNode);
             return;
          }      // add new node as sibling or child      DefaultMutableTreeNode newNode
             = new DefaultMutableTreeNode("New");      if (event.getSource().equals(addSiblingButton))
          {  DefaultMutableTreeNode parent
                = (DefaultMutableTreeNode)selectedNode.getParent();         if (parent != null)
             {  int selectedIndex = parent.getIndex(selectedNode);
                model.insertNodeInto(newNode, parent,
                   selectedIndex + 1);
             }
          }
          else if (event.getSource().equals(addChildButton))
          {  model.insertNodeInto(newNode, selectedNode,
                selectedNode.getChildCount());
          }      // now display new node      TreeNode[] nodes = model.getPathToRoot(newNode);
          TreePath path = new TreePath(nodes);
          tree.scrollPathToVisible(path);
       }   private DefaultTreeModel model;
       private JTree tree;
       private JButton addSiblingButton;
       private JButton addChildButton;
       private JButton deleteButton;
       private JButton editButton;
    }其中包含了添加兄弟和子节点,删除节点,双击该节点就能修改。Java核心技术 卷II中的例子,有详细的解释,tree.setEditable(true)这个方法就是使树可修改,model.removeNodeFromParent(selectedNode)是删除的部分。