【问题标题】:Netbeans Nodes API - delete node from explorerNetbeans Nodes API - 从资源管理器中删除节点
【发布时间】:2015-04-24 07:26:20
【问题描述】:

我正在使用 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(); 这会改变节点的外观,但不会完全删除它。

【问题讨论】:

    标签: java nodes netbeans-platform


    【解决方案1】:

    如果您看一下我编写的以下代码; https://github.com/flinkgutt/netbeans-samples/blob/master/nodes/node-samples/view-beantree/src/net/flinkgutt/samples/nodes/view/beantree/CategoryNode.java 在文件的底部有一个名为“RemoveCategoryAction”的私有类,它应该可以帮助您。

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

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 2011-04-16
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多