我希望jtree中的条件弹出菜单基于我右键单击的节点。可能吗?我实现如下,但如果我点击深度级别1的节点,它首先显示正确的弹出菜单,但之后如果我右键单击级别2的节点,我仍然得到与级别1相同的弹出菜单。反之亦然。
DefaultMutableTreeNode node = (DefaultMutableTreeNode) pmTree.getLastSelectedPathComponent();
popup = new JPopupMenu();
popup.setInvoker(pmTree);
PopupHandler handler = new PopupHandler(pmTree, popup);
if(node.getLevel() == 1)
{
popup.add(getMenuItem("Start a VM", handler));
popup.add(getMenuItem("Monitor all VMs", handler));
}
else if(node.getLevel() == 2)
{
popup.add(getMenuItem("Change VM configuration", handler));
popup.add(getMenuItem("Monitor VM", handler));
popup.add(getMenuItem("Migrate VM", handler));
popup.add(getMenuItem("Show VM Configuration", handler));
popup.add(getMenuItem("Stop VM", handler));
}
答案 0 :(得分:2)
这个问题似乎与您的情况有关:
JTree and dropdown options on right clicking nodes
您可以发布更多代码吗?
在没有更多上下文的情况下很难分辨,但我认为问题是菜单是在第一次点击时构建和初始化的,但在随后的点击中没有被替换。
答案 1 :(得分:1)
这应该是可能的,首先尝试打印出node.getLevel(),以确保在输入条件代码之前该级别是正确的。由于您每次创建一个新的JPopupMenu对象时,您似乎不需要在弹出窗口中调用removeAll()。每次单击一个节点时,是否在方法中调用此代码?另外,级别1的节点是否可能是来自级别2的节点的阴影输入?