一、處理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();
}
}