我做的这个是tree的可以自行增加、删除与修改节点的程序,在增加部分有个问题不明白~,大家看看关键代码部分:
    public void addButton_actionPerformed(ActionEvent e) {
          DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode("新节点");
          TreePath treePath = jTree1.getSelectionPath();
          DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)
                                             treePath.getLastPathComponent();
          treeNode.insertNodeInto(dmtn,treeNode.getChildCount());
          jTree1.scrollPathToVisible(new TreePath(dmtn.getPath()));
    }
为什么这样的新增加节点只可以是一个??就是说我按了按扭第一次可以增加,但第二次按就没反应了,而我改了用DefaultTreeModel来增加问题就解决了,为什么?看看下面代码:
   public void addButton_actionPerformed(ActionEvent e) {
          DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode("新节点");
          TreePath treePath = jTree1.getSelectionPath();
          DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)
                                              treePath.getLastPathComponent();
          ///////dtm是我前面添加的DefaultTreeModel的实例
          dtm.insertNodeInto(dmtn,treeNode,treeNode.getChildCount());
          jTree1.scrollPathToVisible(new TreePath(dmtn.getPath()));
    }
这样问题就解决了~~为什么一定要用model???不用可以吗??请高手说说Model的用处和说说为什么我第一个程序这样写不行,谢谢,再线等待~~

解决方案 »

  1.   

    Swing的设计模式是MVC模式,即JTree只负责处理界面显示和事件,JTree中的数据(如结点上的文字)是存储在Model中的(也是一个类,不过是负责存储数据,所以启了一个这样的名字,以便全世界的人一看到就知道这是干什么用的),所以当你要增加或删除结点时,Model中的数据就要改变,故要调用Model中的方法来进行处理,然后Model中的方法会去调用更新界面的方法,让JTree重新刷新界面元素,把改变显示出来.这个在JList,JTable中也是要这样做的,也许是存储的数据可以很多吧,但JButton之类就不用了.大概就是这么回事,讲不清楚的地方,请见凉,本人也是菜鸟.
      

  2.   

    多口问句,insertNodeInto是DefaultMutableTreeNode类的方法吗?为什么我查不到的(JDK 1.5)???
      

  3.   

    你第二次点增加的时候,treeNode应该没有了吧? public void addButton_actionPerformed(ActionEvent e) {
              DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode("新节点");
              TreePath treePath = jTree1.getSelectionPath();
              DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)
                                                 treePath.getLastPathComponent();
              treeNode.insertNodeInto(dmtn,treeNode.getChildCount()); //在这里打断点看看
              jTree1.scrollPathToVisible(new TreePath(dmtn.getPath()));
        }