package test.swing;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;/**
 * This program demonstrates tree editing.
 */
public class TreeEditTest {
  public static void main(String[] args) {
    JFrame frame = new TreeEditFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}/**
 * A frame with a tree and buttons to edit the tree.
 */
class TreeEditFrame extends JFrame implements MouseListener {
  public TreeEditFrame() {
    setTitle("TreeEditTest");
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);    // construct tree    TreeNode root = makeSampleTree();
    model = new DefaultTreeModel(root);
    tree = new JTree(model);
    tree.setEditable(true);
    tree.addMouseListener(this);    // add scroll pane with tree    JScrollPane scrollPane = new JScrollPane(tree);
    add(scrollPane, BorderLayout.CENTER);    makeButtons();
    pop = new JPopupMenu();
    JMenuItem addChild, deleteNode;
    addChild = new JMenuItem("添加");    addChild.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();        if (selectedNode == null)
          return;        DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");
        model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());        // now display new node        TreeNode[] nodes = model.getPathToRoot(newNode);
        TreePath path = new TreePath(nodes);
        tree.scrollPathToVisible(path);
      }
    });    deleteNode = new JMenuItem("删除");    deleteNode.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();        if (selectedNode != null && selectedNode.getParent() != null)
          model.removeNodeFromParent(selectedNode);
      }
    });    pop.add(addChild);
    pop.add(deleteNode);
  }  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("San Diego");
    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;
  }  /**
   * Makes the buttons to add a sibling, add a child, and delete a node.
   */
  public void makeButtons() {
    JPanel panel = new JPanel();
    JButton addSiblingButton = new JButton("Add Sibling");
    addSiblingButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();        if (selectedNode == null)
          return;        DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();        if (parent == null)
          return;        DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");        int selectedIndex = parent.getIndex(selectedNode);
        model.insertNodeInto(newNode, parent, selectedIndex + 1);        // now display new node        TreeNode[] nodes = model.getPathToRoot(newNode);
        TreePath path = new TreePath(nodes);
        tree.scrollPathToVisible(path);
      }
    });
    panel.add(addSiblingButton);    JButton addChildButton = new JButton("Add Child");
    addChildButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();        if (selectedNode == null)
          return;        DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");
        model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());        // now display new node        TreeNode[] nodes = model.getPathToRoot(newNode);
        TreePath path = new TreePath(nodes);
        tree.scrollPathToVisible(path);
      }
    });
    panel.add(addChildButton);    JButton deleteButton = new JButton("Delete");
    deleteButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();        if (selectedNode != null && selectedNode.getParent() != null)
          model.removeNodeFromParent(selectedNode);
      }
    });
    panel.add(deleteButton);
    add(panel, BorderLayout.SOUTH);
  }  public void mouseClicked(MouseEvent e) {
  }  public void mouseEntered(MouseEvent e) {
  }  public void mouseExited(MouseEvent e) {
  }  public void mousePressed(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON3) {      pop.show(this, e.getX(), e.getY() + 20);
    }
  }  public void mouseReleased(MouseEvent e) {
  }  private JPopupMenu pop;  private DefaultTreeModel model;  private JTree tree;  private static final int DEFAULT_WIDTH = 400;  private static final int DEFAULT_HEIGHT = 200;
}

解决方案 »

  1.   

    老紫竹是很不错,不过要和我想要的效结有差别,我是第一次用TREE所以,很多地方搞不一定,不管怎么样,还是要谢谢大家的
      

  2.   

    老紫竹牛人!
    楼主要的不是CS而是BS么?
    到网上找个页面实现(就是html+js或者好点的带ajax)然后自己用组合模式改造成动态的即可。
      

  3.   

    我觉得直接用JAVASCRIPT就搞的定,还有就是AJAX,现在很流行的.我原来有一个做菜单的例子,很多模板的,直接拿来就用的,现在手边没有,我晚上回去找找发给你,打包好的.是JavaScript的.
      

  4.   

    数据库用
    while {大类
        while(){
         子类
        }
    }