gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:51 26 4
gpt4 key购买 nike

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

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

所有节点都是 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(); 这会更改节点的外观,但不会完全删除它。

最佳答案

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

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

希望对你有帮助!

关于java - Netbeans Nodes API - 从资源管理器中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com