Swing jtree中的条件弹出菜单
我希望jtree中有一个条件弹出菜单,它基于我右键单击的节点。可能吗?我按如下方式实现了它,但如果我首先单击深度级别1的节点,它会显示正确的弹出菜单,但是如果我右键单击级别2的节点,我仍然会得到与级别1相同的弹出菜单。反之亦然Swing jtree中的条件弹出菜单,swing,popup,jtree,Swing,Popup,Jtree,我希望jtree中有一个条件弹出菜单,它基于我右键单击的节点。可能吗?我按如下方式实现了它,但如果我首先单击深度级别1的节点,它会显示正确的弹出菜单,但是如果我右键单击级别2的节点,我仍然会得到与级别1相同的弹出菜单。反之亦然 DefaultMutableTreeNode node = (DefaultMutableTreeNode) pmTree.getLastSelectedPathComponent(); popup = new JPopupMenu(); popup.se
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级节点的输入吗?这个问题似乎与您的情况有关: 你能发布更多的代码吗
如果没有更多的上下文,很难判断,但我认为问题在于,菜单在第一次单击时被构建和初始化,但在随后的单击中没有被替换。这个问题似乎与您的情况有关: 你能发布更多的代码吗 如果没有更多的上下文,很难判断,但我假设问题是菜单在第一次单击时被构建和初始化,但在随后的单击中没有被替换