JTree 动态增减节点demo

来源:http://zhidao.baidu.com/question/90874425

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class TreeTest implements ActionListener,TreeModelListener{
  JLabel label=null;
  JTree  tree=null;
  DefaultTreeModel treeModel=null;
  String nodeName=null;//原有节点名称
  
  public TreeTest(){
    JFrame f=new JFrame("TreeTest");
    Container contentPane=f.getContentPane();
    
    DefaultMutableTreeNode root=new DefaultMutableTreeNode("资源管理器"); 
    
    tree=new JTree(root);
    tree.setEditable(true);
    tree.addMouseListener(new MouseHandle());
    treeModel=(DefaultTreeModel)tree.getModel();
    treeModel.addTreeModelListener(this);
    
    JScrollPane scrollPane=new JScrollPane();
    scrollPane.setViewportView(tree);
    
    JPanel panel=new JPanel();
    JButton b=new JButton("新增节点");
    b.addActionListener(this);
    panel.add(b);
    b=new JButton("删除节点");
    b.addActionListener(this);
    panel.add(b);
    b=new JButton("清除所有节点");
    b.addActionListener(this);
    panel.add(b);
    
    label=new JLabel("Action");
    contentPane.add(panel,BorderLayout.NORTH);
    contentPane.add(scrollPane,BorderLayout.CENTER);
    contentPane.add(label,BorderLayout.SOUTH);
    f.pack();
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter(){
        @Override
     public void windowClosing(WindowEvent e){
       System.exit(0); 
     }
    });
  } 
  //本方法运行新增、删除、清除所有节点的程序代码.
    @Override
  public void actionPerformed(ActionEvent ae){
    if (ae.getActionCommand().equals("新增节点")){
      DefaultMutableTreeNode parentNode=null;
      DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新节点");
      newNode.setAllowsChildren(true);
      TreePath parentPath=tree.getSelectionPath();
          
         //取得新节点的父节点
      parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent());

         //由DefaultTreeModel的insertNodeInto()方法增加新节点
      treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount());

         //tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点
         //会被 包在文件夹中,你必须自行展开文件夹才看得到。
      tree.scrollPathToVisible(new TreePath(newNode.getPath()));      
      label.setText("新增节点成功");
    }
    if (ae.getActionCommand().equals("删除节点")){
     TreePath treepath=tree.getSelectionPath();
     if (treepath!=null){
          //下面两行取得选取节点的父节点.
       DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent();
       TreeNode parent=(TreeNode)selectionNode.getParent();
       if (parent!=null) {
             //由DefaultTreeModel的removeNodeFromParent()方法删除节点,包含它的子节点。
         treeModel.removeNodeFromParent(selectionNode);
         label.setText("删除节点成功");
       }
     }     
    }
    if (ae.getActionCommand().equals("清除所有节点")){

        //下面一行,由DefaultTreeModel的getRoot()方法取得根节点.
     DefaultMutableTreeNode rootNode=(DefaultMutableTreeNode)treeModel.getRoot();
 
        //下面一行删除所有子节点.
     rootNode.removeAllChildren();   
 
        //删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除.     
     treeModel.reload();
     label.setText("清除所有节点成功");
    }
  }
    @Override
     public void treeNodesChanged(TreeModelEvent e){
      TreePath treePath=e.getTreePath();
      DefaultMutableTreeNode node=(DefaultMutableTreeNode)treePath.getLastPathComponent();
      try{
        int[] index=e.getChildIndices();
        node=(DefaultMutableTreeNode)node.getChildAt(index[0]); 
      }catch(NullPointerException exc){}
        label.setText(nodeName+"更改数据为:"+(String)node.getUserObject());
     }
    @Override
    public void treeNodesInserted(TreeModelEvent e){
      System.out.println("new node insered");       
    }
    @Override
    public void treeNodesRemoved(TreeModelEvent e){
      System.out.println("node deleted"); 
    }
    @Override
    public void treeStructureChanged(TreeModelEvent e){
      System.out.println("Structrue changed"); 
    }
    public static void main(String[] args){
      new TreeTest(); 
    }
    
    class MouseHandle extends MouseAdapter{
        @Override
      public void mousePressed(MouseEvent e){
         try{
           JTree tree=(JTree)e.getSource();
           int rowLocation=tree.getRowForLocation(e.getX(),e.getY());
           TreePath treepath=tree.getPathForRow(rowLocation); 
           TreeNode treenode=(TreeNode)treepath.getLastPathComponent();
           nodeName=treenode.toString();           
         }catch(NullPointerException ne){}
      } 
    }
}

转载于:https://www.cnblogs.com/Leo-Forest/archive/2012/10/11/2720386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值