現在、私のプログラムには、JTree
動的に構築されるメニューがあります。各要素がノードを表す文字列の配列でパスを記述するオブジェクトをメニュー ビルダーに渡します。最終ノードは、そのオブジェクトのメソッドを呼び出すように設定されます。新しいノードは、まだ存在しない場合にのみ作成されます。それ以外の場合は、サブメニューがチェックされ、プロセス全体が繰り返されます。
JMenu
これをツリーではなくシステムに切り替えようとしていますが、いくつか問題があります。
たとえば、文字列の配列は次のようになります。
["New", "Job", "Item A"]
["New", "Job", "Item B"]
["New", "Search", "Item C"]
これにより、次のようなツリーが作成されます。
┬ New
├──┬ Job
│ ├── Item A
│ └── Item B
└──┬ Search
└── Item C
今私が抱えている問題は、サブメニューがJMenu
. 目的の名前のサブメニューが既に存在するかどうかを確認するにはどうすればよいですか?
これは私がどのように構築するかの例ですJTree
:
String[] nodeNames = pane.getNodeDirectory();
MenuTreeNode targetNode = root;
int i = 0;
if(targetNode.getChildCount() > 0) {
//Search for the first node that doesn't exist in the pane's directory
for(; i < nodeNames.length; ++i) {
Enumeration e = targetNode.children();
while(e.hasMoreElements()) {
MenuTreeNode node = (MenuTreeNode)e.nextElement();
if(node.getName().equals(nodeNames[i])) {
targetNode = node;
break;
}
}
//We've been over all the children and none matched so we need
//to build the rest of the directory.
if(!e.hasMoreElements()) {
++i;
break;
}
}
}
//Build the remainder of the pane's directory
for(; i < nodeNames.length; ++i) {
MenuTreeNode currentNode = new MenuTreeNode(nodeNames[i]);
targetNode.add(currentNode);
targetNode = currentNode;
}
targetNode.setContentPane(pane);
model.nodeStructureChanged(root);