目前我的程序有一个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);