可编辑的JTree
package PreD;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;public class TreeEditFrame extends JFrame implements ActionListener {/** * */private static final long serialVersionUID = 1L;public static void main(String[] args) {JFrame frame = new TreeEditFrame();frame.setVisible(true);}public TreeEditFrame() {setTitle("TreeEditTest");setSize(300, 200);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});// construct treeTreeNode root = makeSampleTree();model = new DefaultTreeModel(root);tree = new JTree(model);tree.setEditable(true);// add scroll pane with tree to content paneContainer contentPane = getContentPane();JScrollPane scrollPane = new JScrollPane(tree);contentPane.add(scrollPane, "Center");// make button panelJPanel panel = new JPanel();addSiblingButton = new JButton("Add Sibling");addSiblingButton.addActionListener(this);panel.add(addSiblingButton);addChildButton = new JButton("Add Child");addChildButton.addActionListener(this);panel.add(addChildButton);deleteButton = new JButton("Delete");deleteButton.addActionListener(this);panel.add(deleteButton);contentPane.add(panel, "South");}public TreeNode makeSampleTree() {DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");root.add(country);DefaultMutableTreeNode state = new DefaultMutableTreeNode("California");country.add(state);DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose");state.add(city);city = new DefaultMutableTreeNode("Cupertino");state.add(city);state = new DefaultMutableTreeNode("Michigan");country.add(state);city = new DefaultMutableTreeNode("Ann Arbor");state.add(city);country = new DefaultMutableTreeNode("Germany");root.add(country);state = new DefaultMutableTreeNode("Schleswig-Holstein");country.add(state);city = new DefaultMutableTreeNode("Kiel");state.add(city);return root;}public void actionPerformed(ActionEvent event) {DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if (selectedNode == null) {return;}if (event.getSource().equals(deleteButton)) {if (selectedNode.getParent() != null) {model.removeNodeFromParent(selectedNode);}return;}// add new node as sibling or childDefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");if (event.getSource().equals(addSiblingButton)) {DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();if (parent != null) {int selectedIndex = parent.getIndex(selectedNode);model.insertNodeInto(newNode, parent, selectedIndex + 1);}} else if (event.getSource().equals(addChildButton)) {model.insertNodeInto(newNode, selectedNode,selectedNode.getChildCount());}// now display new nodeTreeNode[] nodes = model.getPathToRoot(newNode);TreePath path = new TreePath(nodes);tree.scrollPathToVisible(path);}private DefaultTreeModel model;private JTree tree;private JButton addSiblingButton;private JButton addChildButton;private JButton deleteButton;}?