NetBeans Platform 7.1 アプリケーションの Explorer Manager (BeanTreeView または OutlineView のいずれか) が、単一のノードを削除するときはツリー構造で正常に機能するのに、複数のノードを削除するときは機能しない理由がわかりません。問題は、削除自体ではなく、ツリーの更新にあります。削除アクション (システム アクション) を呼び出すと、ノードで 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 を返しますが、再び Node 1 を返す必要があります。
ノード 1 とノード 2 (またはその他の最上位ノード) を一緒に削除すると、それらが特別な RootNode ノードの子であっても、同様の問題が発生します。ルートの唯一の違いは、最初のノードでのみ問題なく動作することですが、選択された他のノードよりも親を見つけることができません。
どこに問題があるのでしょうか?