如何在jtree中实现用户自己添加节点,请高手指点

解决方案 »

  1.   

    一个简单的例子:import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    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 TreeTest {
      public static void main(String[] args) {
        JFrame frame = new TreeEditFrame();
        frame.setVisible(true);
      }
    }class TreeEditFrame extends JFrame implements ActionListener {
      private DefaultTreeModel model;
      private JTree tree;
      private JButton addChildButton;
      private JButton deleteButton;
      
      public TreeEditFrame() {
        setTitle("TreeTest");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    TreeNode root = makeSampleTree();
        model = new DefaultTreeModel(root);
        tree = new JTree(model);
        tree.setEditable(true);    Container contentPane = getContentPane();
        JScrollPane scrollPane = new JScrollPane(tree);
        contentPane.add(scrollPane, "Center");    JPanel panel = new JPanel();
        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("Root");
        DefaultMutableTreeNode country = new DefaultMutableTreeNode("Node1");
        root.add(country);
        DefaultMutableTreeNode state = new DefaultMutableTreeNode("subNode1");
        country.add(state);
        DefaultMutableTreeNode city = new DefaultMutableTreeNode("subsubNode1");
        state.add(city);
        city = new DefaultMutableTreeNode("subsubNode2");
        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;
        }    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("newNode");    if (event.getSource().equals(addChildButton)) {
          model.insertNodeInto(newNode, selectedNode, selectedNode
              .getChildCount());
        }
        TreeNode[] nodes = model.getPathToRoot(newNode);
        TreePath path = new TreePath(nodes);
        tree.scrollPathToVisible(path);
      }
    }