packagecom.swing.demo;importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjavax.swing.CellEditor;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTree;importjavax.swing.event.CellEditorListener;importjavax.swing.event.ChangeEvent;importjavax.swing.event.TreeModelEvent;importjavax.swing.event.TreeModelListener;importjavax.swing.tree.DefaultMutableTreeNode;importjavax.swing.tree.DefaultTreeModel;importjavax.swing.tree.TreeNode;importjavax.swing.tree.TreePath;/*** tree node 添加 , 删除, 修改
*
*@authorAdministrator
**/
public class JTreeTest implementsActionListener, TreeModelListener {private JLabel statusLabel = null;private JTree tree = null;private DefaultTreeModel treeModel = null;private String oldNodeName = null;publicJTreeTest() {
JFrame frame= new JFrame("JTreeTest 窗体");
Container contentPane=frame.getContentPane();
DefaultMutableTreeNode root= new DefaultMutableTreeNode("根节点");
tree= newJTree(root);
tree.addMouseListener(newMyTreeMouseListener());
treeModel=(DefaultTreeModel) tree.getModel();
treeModel.addTreeModelListener(this);
tree.setEditable(true);
tree.getCellEditor().addCellEditorListener(newMyTreeCellEditorListener());
JScrollPane scrollPane= newJScrollPane();
scrollPane.setViewportView(tree);
JPanel toolBarPanel= newJPanel();
JButton b= new JButton("新增节点");
b.addActionListener(this);
toolBarPanel.add(b);
b= new JButton("删除节点");
b.addActionListener(this);
toolBarPanel.add(b);
b= new JButton("清除所有节点");
b.addActionListener(this);
toolBarPanel.add(b);
statusLabel= new JLabel("Action");
contentPane.add(toolBarPanel, BorderLayout.NORTH);
contentPane.add(scrollPane, BorderLayout.CENTER);
contentPane.add(statusLabel, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
frame.requestFocus();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//本方法运行新增、删除、清除所有节点的程序代码.
public voidactionPerformed(ActionEvent ae) {if (ae.getActionCommand().equals("新增节点")) {
DefaultMutableTreeNode parentNode= null;
DefaultMutableTreeNode newNode= new DefaultMutableTreeNode("新节点");
newNode.setAllowsChildren(true);
TreePath parentPath=tree.getSelectionPath();if (parentPath == null) {return;
}//取得新节点的父节点
parentNode =(DefaultMutableTreeNode) (parentPath
.getLastPathComponent());//由DefaultTreeModel的insertNodeInto()方法增加新节点
treeModel.insertNodeInto(newNode, parentNode,
parentNode.getChildCount());//tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点//会被 包在文件夹中,你必须自行展开文件夹才看得到。
tree.scrollPathToVisible(newTreePath(newNode.getPath()));
tree.setSelectionPath(newTreePath(newNode.getPath()));
statusLabel.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);
statusLabel.setText("删除节点成功");
}
}
}if (ae.getActionCommand().equals("清除所有节点")) {//下面一行,由DefaultTreeModel的getRoot()方法取得根节点.
DefaultMutableTreeNode rootNode =(DefaultMutableTreeNode) treeModel
.getRoot();//下面一行删除所有子节点.
rootNode.removeAllChildren();//删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除.
treeModel.reload();
statusLabel.setText("清除所有节点成功");
}
}public voidtreeNodesChanged(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) {
}
statusLabel.setText(oldNodeName+ "更改数据为:"
+(String) node.getUserObject());
}public static voidmain(String[] args) {newJTreeTest();
}class MyTreeMouseListener extendsMouseAdapter {public voidmousePressed(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();
oldNodeName=treenode.toString();
}catch(NullPointerException ne) {
}
}
}class MyTreeCellEditorListener implementsCellEditorListener {public voideditingStopped(ChangeEvent e) {
Object selectnode=tree.getLastSelectedPathComponent();
DefaultMutableTreeNode node=(DefaultMutableTreeNode) selectnode;
CellEditor cellEditor=(CellEditor) e.getSource();
String newName=(String) cellEditor.getCellEditorValue();
node.setUserObject(newName);
DefaultTreeModel model=(DefaultTreeModel) tree.getModel();
model.nodeStructureChanged(node);
}public voideditingCanceled(ChangeEvent e) {
editingStopped(e);
}
}
@Overridepublic voidtreeNodesInserted(TreeModelEvent e) {
}
@Overridepublic voidtreeNodesRemoved(TreeModelEvent e) {
}
@Overridepublic voidtreeStructureChanged(TreeModelEvent e) {
}
}