`

Tree.java

阅读更多
package com.hengyuan.hyoas.page.test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class Tree implements ActionListener,TreeModelListener{ 
JLabel label=null; 
JTree tree=null; 
DefaultTreeModel treeModel=null; 
String nodeName=null;//原有节点名称 

public Tree(){ 
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(){ 
public void windowClosing(WindowEvent e){ 
System.exit(0); 
} 
}); 
} 
//本方法运行新增、删除、清除所有节点的程序代码. 
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("清除所有节点成功"); 
} 
} 
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()); 
} 
public void treeNodesInserted(TreeModelEvent e){ 
System.out.println("new node insered"); 
} 
public void treeNodesRemoved(TreeModelEvent e){ 
System.out.println("node deleted"); 
} 
public void treeStructureChanged(TreeModelEvent e){ 
System.out.println("Structrue changed"); 
} 
public static void main(String[] args){ 
new Tree(); 
} 

class MouseHandle extends MouseAdapter{ 
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){} 
} 
} 
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics