Jtree中添加删除节点的例子

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame {

JTree tree = new JTree();

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();

TreeSelectionModel selectionModel = tree.getSelectionModel();

JButton removeButton = new JButton("Remove selected node");

JButton addButton = new JButton("Add node");

public Test() {

Container contentPane = getContentPane();

selectionModel.setSelectionMode(

TreeSelectionModel.SINGLE_TREE_SELECTION);

contentPane.add(new ControlPanel(), BorderLayout.NORTH);

contentPane.add(tree, BorderLayout.CENTER);

tree.addTreeSelectionListener(

new TreeSelectionListener() {

public void valueChanged(TreeSelectionEvent e) {

TreePath path = e.getNewLeadSelectionPath();

boolean nodesAreSelected = (path != null);

addButton.setEnabled(nodesAreSelected);

removeButton.setEnabled(nodesAreSelected);

}

});

model.addTreeModelListener(new TreeModelListener() {

public void treeNodesInserted(TreeModelEvent e) {

showInsertionOrRemoval(e, " added to ");

}

public void treeNodesRemoved(TreeModelEvent e) {

showInsertionOrRemoval(e, " removed from ");

}

private void showInsertionOrRemoval(TreeModelEvent e,

String s) {

Object[] parentPath = e.getPath();

int[] indexes = e.getChildIndices();

Object[] children = e.getChildren();

Object parent = parentPath[parentPath.length - 1];

JOptionPane.showMessageDialog(
Test.this,
"Node " + children[0].toString() + "" + s
+ parent.toString() + " at index " + indexes[0],
"Node Added or Removed",
JOptionPane.INFORMATION_MESSAGE);

}

public void treeNodesChanged(TreeModelEvent e) {
}

public void treeStructureChanged(TreeModelEvent e) {
}

});

}

class ControlPanel extends JPanel {

public ControlPanel() {

addButton.setEnabled(false);

removeButton.setEnabled(false);

add(addButton);

add(removeButton);

addButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

TreePath path =

selectionModel.getSelectionPath();

MutableTreeNode parent, node =

(MutableTreeNode) path.getLastPathComponent();

if (path.getPathCount() > 1)

parent = (MutableTreeNode) node.getParent();

else

parent = (MutableTreeNode) node;

int index = parent.getIndex(node) + 1;

String s = JOptionPane.showInputDialog(

Test.this,

"Enter a name for the new node:",

"New Tree Node",

JOptionPane.QUESTION_MESSAGE);

MutableTreeNode newNode =

new DefaultMutableTreeNode(s);

model.insertNodeInto(newNode, parent, index);

}

});

removeButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

TreePath path =

selectionModel.getSelectionPath();

if (path.getPathCount() == 1) {

JOptionPane.showMessageDialog(ControlPanel.this,

"Can't remove root node!");

return;

}

MutableTreeNode node =

(MutableTreeNode) path.getLastPathComponent();

model.removeNodeFromParent(node);

}

});

}

}

public static void main(String args[]) {

Test t = new Test();

t.setSize(400, 300);

t.show();

}

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值