java tree 删除节点属性_JTree 添加 , 删除, 修改

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) {

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值