向视图添加菜单操作

问题描述 投票:0回答:1

我想在我的视图中添加一个菜单操作,就像从Eclipse控制台中添加的那样:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9LMnhUei5wbmcifQ==” alt =“在此处输入图像描述”>

我设法做了非常相似的事情。从菜单上我要执行的两个操作中,有一个与MenuCreator相关联,但是以这种方式进行操作会将此操作设置为最上面的一个,换句话说,一个带有箭头的菜单,然后单击它而不是打开菜单,而是从该操作的run方法中启动代码。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS91OEtkYS5wbmcifQ==” alt =“在此处输入图像描述”>

我想要控制台操作的确切行为,我希望菜单上的2个操作和顶部的小图标打开此菜单。如何执行此操作?

到目前为止的代码:

private void createToolBar() {

    IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();

    actionNovaDespesa = new OpenNewDespesa();
    actionNovaDespesa.setMenuCreator(new CustomActionMenu());
    toolBar.add(actionNovaDespesa);
}



public class CustomActionMenu implements IMenuCreator {

        private Menu menu;

        public Menu getMenu(Control parent) {

            menu = new Menu(parent);       

            MenuItem menuItemColaboradores = new MenuItem(menu, SWT.PUSH);
            menuItemColaboradores.setText(LabelVARS.DESPESA_COLABORADOR);
            menuItemColaboradores.setImage(Activator.getImageDescriptor(IconVARS.TOOLBAR_UTILIZADOR).createImage());
            menuItemColaboradores.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent event) {

                    new OpenNewDespesaColaborador().run();
                }
            });  

            return menu;
        }

        public void dispose() {
            if(menu != null) {
                menu.dispose();
                menu = null;
            }
        }

        public Menu getMenu(Menu parent) {
            return null;
        }

    }
java eclipse-rcp
1个回答
1
投票

您需要使菜单实现IActionIMenuCreator。类似于:

  class DropDownAction extends Action implements IMenuCreator
  {
    private Menu menu;

    DropDownAction()
    {
      super("Name", IAction.AS_DROP_DOWN_MENU);

      setImageDescriptor(... image descriptor for button);

      setMenuCreator(this);
    }


    @Override
    public void dispose()
    {
      if (menu != null) {
        menu.dispose();
        menu = null;
      }
    }


    @Override
    public void runWithEvent(final Event event)
    {
      if (event.widget instanceof ToolItem)
        {
          final ToolItem toolItem = (ToolItem)event.widget;
          final Control control = toolItem.getParent();
          final Menu menu = getMenu(control);

          final Rectangle bounds = toolItem.getBounds();
          final Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
          menu.setLocation(control.toDisplay(topLeft));
          menu.setVisible(true);
        }
    }

    @Override
    public Menu getMenu(final Control parent)
    {
      if (menu != null) {
        menu.dispose();
      }

      menu = new Menu(parent);

      // TODO add your menu items

      return menu;
    }   

    @Override
    public Menu getMenu(final Menu parent)
    {
      return null;
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.