Как создать контекстное меню мыши для jface treeviewer

Я создал TreeViewer с помощью JFace, но теперь мне нужно добавить к узлам прослушиватель правой кнопки мыши. После щелчка правой кнопкой мыши должно появиться такое меню, как:

  1. Сделай что-нибудь
  2. Ничего не делать
  3. Удалить

Я пытаюсь сделать это следующим образом, но выдает исключение с нулевым указателем.

MenuManager menuMgr = new MenuManager();
        menuMgr.setRemoveAllWhenShown(true);

        menuMgr.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(IMenuManager menuManager) {

                IContributionManager menu = null;
                MenuItem[] items = (MenuItem[]) menu.getItems();
                for (int i = 0; i < items.length; i++)
                    items[i].dispose();

                MenuItem itemCollectionFolder = new MenuItem((Menu) menu, SWT.NONE);
                itemCollectionFolder.setText("Add Something" );

                MenuItem itemNewTestCase = new MenuItem((Menu) menu, SWT.NONE);
                itemNewTestCase.setText("Do Nothing" );

            }
        });

        Control tree = treeViewer.getControl();

        Menu menu = menuMgr.createContextMenu(tree);

        tree.setMenu(menu);

person vinod raj    schedule 08.12.2014    source источник


Ответы (1)


Попробуйте это, не забудьте вызвать: createContextMenu (viewer);

/**
 * Creates the context menu
 *
 * @param viewer
 */
protected void createContextMenu(Viewer viewer) {
    MenuManager contextMenu = new MenuManager("#ViewerMenu"); //$NON-NLS-1$
    contextMenu.setRemoveAllWhenShown(true);
    contextMenu.addMenuListener(new IMenuListener() {
        @Override
        public void menuAboutToShow(IMenuManager mgr) {
            fillContextMenu(mgr);
        }
    });

    Menu menu = contextMenu.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
}

/**
 * Fill dynamic context menu
 *
 * @param contextMenu
 */
protected void fillContextMenu(IMenuManager contextMenu) {
    contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));

    contextMenu.add(new Action("Do Something") {
        @Override
        public void run() {
            // implement this
        }
    });
    contextMenu.add(new Action("Do Nothing") {
        @Override
        public void run() {
            // don't do anything here
        }
    });
    contextMenu.add(new Action("Delete") {
        @Override
        public void run() {
            // implement this
        }
    });
}

Чтобы получить выбранный элемент средства просмотра дерева, сделайте следующее:

IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
selection.getFirstElement();
selection.toList(); // or if you handle multi selection
person flavio.donze    schedule 08.12.2014
comment
когда я импортирую org.eclipse.ui в импортированный пакет для IWorkbenchActionConstants и запускаю код, он выдает ошибку, поскольку идентификатор приложения не найден, поэтому какой пакет подходит для этого, поскольку я использую приложение e4 @ flavio.donze - person vinod raj; 08.12.2014
comment
Вы действительно можете удалить эту строку, она используется для расширения вашего меню действиями / командами через точки расширения. Я не думаю, что вам нужна эта функция. - person flavio.donze; 08.12.2014
comment
Можете ли вы показать мне, как мы можем добавить подконтекстное меню для этого контекстного меню, и для этого подконтекстного меню пользователь должен иметь возможность вводить в него какое-то значение. Итак, как это можно сделать @ flavio.donze - person vinod raj; 08.12.2014
comment
лучше всего, если вы создадите новый вопрос - person flavio.donze; 08.12.2014
comment
когда я нажимаю любую кнопку в подменю, как я могу получить название подменю, которое было нажато - person vinod raj; 16.12.2014