условное всплывающее меню в jtree

Мне нужно условное всплывающее меню в 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));
    }

person P R    schedule 12.11.2011    source источник


Ответы (2)


Этот вопрос кажется актуальным для вашей ситуации:

Параметры JTree и раскрывающегося списка для узлов, щелкающих правой кнопкой мыши

Можете ли вы опубликовать больше вашего кода?

Трудно сказать без дополнительного контекста, но я предполагаю, что проблема в том, что меню создается и инициализируется при первом щелчке, но не заменяется при последующем щелчке.

person Eric Rosenberg    schedule 20.11.2011

Это должно быть возможно, попробуйте сначала распечатать node.getLevel(), чтобы убедиться, что уровень правильный, прежде чем он войдет в условный код. Поскольку вы создаете новый объект JPopupMenu каждый раз, кажется, что вам не нужно вызывать removeAll() во всплывающем окне. Вызывается ли этот код в методе каждый раз, когда щелкается узел? Также возможно ли, что узел на уровне 1 затеняет ввод от узла на уровне 2?

person Tim Wright    schedule 17.11.2011