1.要求:任意给一颗树,要求在jsp页面中用表格的形式显示出这个树的关系,并可以进行添加,删除,修改。
给定了一个类:
  public class Node{          private String title;//显示标签;
          private String  id;//节点id;
          private  String upid;//上级节点id
 
}
//在 类中实现,不能再定义其他关于树的属性;

解决方案 »

  1.   

    “不能再定义其他关于树的属性”
    不是要一个private Node node吗
      

  2.   

    这个好办啊,数据应该是从数据库里取出来的吧,递归就可以了。比如,第一次取upid为null的,说明是根节点,得到id为A,显露出来,再取upid = A,遍历显示。依次下去。
      

  3.   

    给你个范例,可以实现添加,删除,修改
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellEditor;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreePath;
    import javax.swing.tree.TreeSelectionModel;public class Test extends JFrame implements MouseListener,ActionListener {
     JTree tree; JPopupMenu popMenu; JMenuItem addItem;
     JMenuItem delItem;
     JMenuItem editItem; public Test() {
      tree = new JTree();
      tree.setEditable(true);
      tree.getSelectionModel().setSelectionMode(
      TreeSelectionModel.SINGLE_TREE_SELECTION);
      tree.addMouseListener(this);
      tree.setCellEditor(new DefaultTreeCellEditor(tree,
      new DefaultTreeCellRenderer()));
      getContentPane().add(tree);
      setSize(200, 200);  popMenu = new JPopupMenu();
      addItem = new JMenuItem("添加");
      addItem.addActionListener(this);
      delItem = new JMenuItem("删除");
      delItem.addActionListener(this);
      editItem = new JMenuItem("修改");
      editItem.addActionListener(this);  popMenu.add(addItem);
      popMenu.add(delItem);
      popMenu.add(editItem);
      
      getContentPane().add(new JScrollPane(tree));
     } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) {
      TreePath path = tree.getPathForLocation(e.getX(), e.getY()); // 关键是这个方法的使用
      if (path == null) {
      return;
      }
      tree.setSelectionPath(path);  if (e.getButton() == 3) {
      popMenu.show(tree, e.getX(), e.getY());
      }
     } public void mouseReleased(MouseEvent e) { } public void actionPerformed(ActionEvent e) {
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
      .getLastSelectedPathComponent();
      if (e.getSource() == addItem) {
      ((DefaultTreeModel) tree.getModel()).insertNodeInto(
      new DefaultMutableTreeNode("Test"), node, node
      .getChildCount());
      tree.expandPath(tree.getSelectionPath());
      } else if (e.getSource() == delItem) {
      if (node.isRoot()) {
      return;
      }
      ((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node);
      } else if (e.getSource() == editItem) {
      tree.startEditingAtPath(tree.getSelectionPath());
      }
     } public static void main(String[] args) {
      Test frame = new Test();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
     }
    }