условное всплывающее меню в jtree - PullRequest
0 голосов
/ 12 ноября 2011

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

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Похоже, что этот вопрос относится к вашей ситуации:

JTree и опции раскрывающегося списка на узлах, щелкающих правой кнопкой

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

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

1 голос
/ 18 ноября 2011

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

...