Swing jtree中的条件弹出菜单

Swing jtree中的条件弹出菜单,swing,popup,jtree,Swing,Popup,Jtree,我希望jtree中有一个条件弹出菜单,它基于我右键单击的节点。可能吗?我按如下方式实现了它,但如果我首先单击深度级别1的节点,它会显示正确的弹出菜单,但是如果我右键单击级别2的节点,我仍然会得到与级别1相同的弹出菜单。反之亦然 DefaultMutableTreeNode node = (DefaultMutableTreeNode) pmTree.getLastSelectedPathComponent(); popup = new JPopupMenu(); popup.se

我希望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));
    }

这应该是可能的,首先尝试打印node.getLevel(),以确保级别在输入条件代码之前是正确的。由于每次都要创建一个新的JPopupMenu对象,所以似乎不需要在弹出窗口中调用removeAll()。是否每次单击节点时都在方法中调用此代码?还有可能是级别1的节点正在隐藏来自级别2的节点的输入吗?

这应该是可能的,请先尝试打印node.getLevel(),以确保级别正确,然后再输入条件代码。由于每次都要创建一个新的JPopupMenu对象,所以似乎不需要在弹出窗口中调用removeAll()。是否每次单击节点时都在方法中调用此代码?还有可能是1级节点隐藏了2级节点的输入吗?

这个问题似乎与您的情况有关:

你能发布更多的代码吗


如果没有更多的上下文,很难判断,但我认为问题在于,菜单在第一次单击时被构建和初始化,但在随后的单击中没有被替换。

这个问题似乎与您的情况有关:

你能发布更多的代码吗

如果没有更多的上下文,很难判断,但我假设问题是菜单在第一次单击时被构建和初始化,但在随后的单击中没有被替换