parentNode()在删除多个子节点时返回null

时间:2012-02-29 23:19:54

标签: java netbeans netbeans-platform

我无法找到解决方案,为什么NetBeans Platform 7.1应用程序中的Explorer Manager(BeanTreeView或OutlineView)在删除单个节点时可以正常使用树结构,但在删除多个节点时则不行。 问题在于刷新树,而不是删除本身。 在调用delete action(系统操作)时,它在我的Node上调用destroy()方法:

@Override
public void destroy() throws IOException {
  //removing the business object
  ...

    try {
      IReloadableViewCapability rvc;
      if (getParentNode() != null) {
        rvc = this.getParentNode().getLookup().lookup(IReloadableViewCapability.class);
      }
      rvc.reloadChildren();
    } catch (Exception ex) {
      logger.log(Level.WARNING, null, ex);
    }

    fireNodeDestroyed();
}

让我们说,我有这样的结构:

  • 节点1
    • 1.1
    • 1.2
    • 1.3
  • 节点2
    • 2.1
    • ...

现在让我们说,我想要删除节点1.1,1.2和1.3。我全部选择它们,调用delete动作并调用节点1.1的 destroy()方法,删除它的数据并在节点1.1的parentNode上调用我的reloadChildren()方法(如图所示)在上面的代码中)。 然后在删除节点1.2后,它变为1.3。 删除1.3的删除数据,但现在getParentNode()返回null,即使它再次返回节点1

将节点1和节点2(或任何其他顶级节点)一起删除时会发生类似的问题,即使它们是特殊RootNode节点的子节点。 root中唯一的区别是,只有第一个节点才能正常运行,但是所选择的任何其他节点都无法找到它的父节点。

哪里可能是问题?

2 个答案:

答案 0 :(得分:0)

解决这个问题的更好方法是避免调用parentNode,但改变我的ChildFactory实现。 我的CHildFactory现在也实现了NodeListener,并且在nodeDestroyed overriden方法中它只调用:

refresh(true);

然后我将侦听器添加到创建的节点:

@Override
protected Node createNodeForKey(Chapters key) {
    ChapterNode chapterNode = new ChapterNode(key);

    chapterNode.addNodeListener(this);
    return chapterNode;
}

然后我修改了我的节点的destroy()方法:

@Override
public void destroy() throws IOException {
    //removing the business object
    ...

    fireNodeDestroyed();
}

答案 1 :(得分:0)

我认为您的元素尚未附加到dom树上。您必须先附加它们,例如:document.body.appendChild(myElement);然后,您可以像这样在IE中删除它们:myElement.parentNode.removeChild(myElement);