JTree的事件處理模式

 一、處理TreeModelEvent事件

當樹的結構有任何變化時,例如節點的值改變了、新增了節點,刪除了節點等都會產生TreeModelEvent事件,要處理這類事件的話就要實現TreeModelListener接口,該接口中定義了四種方法。

public void treeNodesChanged(TreeModelEvent e):當節點改變時系統就會去調用這個方法

public void treeNodesInserted(TreeModelEvent e):新增節點時系統就會調用這個方法

public void treeNodesRemoved(TreeModelEvent e):刪除節點時系統就會調用這個方法

public void treeNodesStructureChanged(TreeModelEvent e):當樹的結構改變時系統就會調用這個方法

TreeModelEvent類本身提供了五種方法:

int[] getChildIndices():返回子節點群的索引值

Object[] getChildren():返回子節點群

Object[] getPath():返回Tree中一條path上(從rootNode到leafNode)的節點

TreePath getTreePath()取得目前位置的TreePath

String toString():取得對象的字符串表示方法

package test;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeModelEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import java.awt.Container;
import java.awt.BorderLayout;
public class TreeDemo5 implements TreeModelListener{
 JLabel label = null;
 String nodeName = null;//原有節點名稱
 public TreeDemo5(){
  JFrame frame = new JFrame("TreeDemo5");
  Container contentPane =  frame.getContentPane();

  DefaultMutableTreeNode root = new DefaultMutableTreeNode("資源管理器");
  DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("我的公文包");
  DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的電腦");
  DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夾");
  DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme");
  root.add(node1);
  root.add(node2);
  root.add(node3);
  root.add(node4);

  DefaultMutableTreeNode leafNode = new DefaultMutableTreeNode("公司文件");
  node1.add(leafNode);
  leafNode = new DefaultMutableTreeNode("私人文件");
  node1.add(leafNode);
  
  leafNode = new DefaultMutableTreeNode("本地磁盤(C:)");
  node2.add(leafNode);
  leafNode = new DefaultMutableTreeNode("本地磁盤(D:)");
  node2.add(leafNode);
  leafNode = new DefaultMutableTreeNode("本地磁盤(E:)");
  node2.add(leafNode);

  DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("網站列表");
  node3.add(node31);

  leafNode = new DefaultMutableTreeNode("奇摩站");
  node31.add(leafNode);
  leafNode = new DefaultMutableTreeNode("職棒消息");
  node31.add(leafNode);
  leafNode = new DefaultMutableTreeNode("網絡書店");
  node31.add(leafNode);

  JTree tree = new JTree(root);
  tree.setEditable(true);
  DefaultTreeModel treeModel = (DefaultTreeModel)tree.getModel();
  treeModel.addTreeModelListener(this);

  JScrollPane scrollPane = new JScrollPane();
  scrollPane.setViewportView(tree);

  label = new JLabel("更改數據為:");
  contentPane.add(scrollPane,BorderLayout.CENTER);
  contentPane.add(label,BorderLayout.SOUTH);
  frame.pack();
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 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 e1){
   e1.printStackTrace();
  }
  label.setText(nodeName + "更改數據為:" + (String)node.getUserObject());
 }
 public void treeNodesInserted(TreeModelEvent e){}
 public void treeNodesRemoved(TreeModelEvent e){}
 public void treeStructureChanged(TreeModelEvent e){}
 public static void main(String[] args){
  new TreeDemo5();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值