Netbeans Nodes API - 从资源管理器中删除节点

时间:2015-04-24 07:26:21

标签: java nodes netbeans-platform

我正在使用Netbeans Nodes API在我的桌面应用程序中创建一个资源管理器(基于Netbeans RCP)。节点有一些层次结构,当删除其中一个时,我也会删除它的所有子节点。从此资源管理器中删除节点时,我遇到了一些非常奇怪的行为。

问题:我将节点存储在Cache(基本上是HashMap)中,以便轻松访问它们。当我创建一个节点并在同一个会话中删除它时,它会从资源管理器中消失(这就是我想要的)。但是,当我删除不同会话中的节点时(我创建一个节点,关闭应用程序并再次重新启动它,我想立即将其删除),该节点保留在资源管理器中(至少在视觉上,如果我再次尝试删除它) ,应用程序说它不存在)。我花了几个小时试图找出为什么会发生这种情况而且我一无所知。

所有节点都是AbstractNodes:

public class ProductNode extends AbstractNode {
...
}

删除节点:

public static void deleteProduct(Product product) {

            String pID = product.getID();

            // get node from cache
            // THIS ALWAYS RETURNS THE CORRECT NODE, never null so the problem is not here
            ProductNode childNode = NDNodesCache.getProductNode(pID);

            // get parent node from cache and remove child node
            // ALSO RETURNS CORRECT NODE
            TopProductNode parent = NDNodesCache.getTopProductNode();
            parent.getChildren().remove(new Node[]{childNode});

            // remove the node from node cache
            NDNodesCache.removeProductNode(pID);
    }

调用此函数后,无法再次删除节点,因为应用程序声称它不在那里但是在视觉上停留在那里(甚至提供与该节点关联的上下文菜单)。

首先,我认为缓存有问题,但无论何时,它都会返回所需的节点(即使在应用程序重新启动后,因为在资源管理器初始化期间添加了节点)。你知道如何解决这个问题吗?

我也试过调用childNode.destroy();这会改变节点的外观,但不会完全删除它。

1 个答案:

答案 0 :(得分:0)

如果您查看我已经制作的以下代码段; https://github.com/flinkgutt/netbeans-samples/blob/master/nodes/node-samples/view-beantree/src/net/flinkgutt/samples/nodes/view/beantree/CategoryNode.java 在文件的底部有一个名为" RemoveCategoryAction"的私有类。这应该会帮助你。

整个项目主要是展示如何使用节点执行某些操作,删除其中的节点。从beantreeview中的节点上的上下文菜单中调用私有类。

希望它有所帮助!