• 2014年8月24日 菜单 工具条 右键菜单(上下文菜单)


        今天说说菜单 工具条 右键菜单吧,总的来说这些东西其实就是同一个东西。以前我们在做插件的时候遇到右键菜单啊,菜单什么的都会习惯性地去用actionSets这个拓展点。不过现在官方却把这个扩展点已经被deprecated弃用了。。官方的说明:

    Do not use this extension point, it will be removed in future versions of this product. Instead, use the extension point org.eclipse.ui.commands

    官方推荐使用command这个拓展点去代替actionSets,至于为什么,可以往下看。

    做一个主菜单如果分别用两种方式的话可以这么做:

    主菜单的扩展点

    1、主菜单(Commands 方式)

    通过 Commands 方式把菜单项添加到主菜单及其工具栏上,和视图菜单一样,也是通过扩展点 org.eclipse.ui.menus 实现,需要设定其 menuContribution 的 locationURI。

    例如,添加一个菜单(菜单可以包含若干个菜单项)到主菜单一栏中,其 locationURI 为:

    menu:org.eclipse.ui.main.menu?after=additions

    添加一个菜单到工具栏之中,其 locationURI 为:

    toolbar:org.eclipse.ui.main.toolbar?after=additions

    当然,我们也可以把菜单项添加到已经存在的菜单当中,例如添加一个菜单项到 Eclipse 的 Search 主菜单当中,其 locationURI 为:

    menu:org.eclipse.search.menu?dialogGroup

    2、主菜单(Actions 方式)

    通过 Actions 方式把菜单项添加到主菜单及其工具栏上,和视图菜单一样,也是通过扩展点 org.eclipse.ui.actionSets 实现,需要设定 action 的 menubarPath 和 toolbarPath 实现。

    例如,添加一个菜单项到 Eclipse 的 Search 主菜单中,其 menubarPath 应为:

    org.eclipse.search.menu/dialogGroup

    注意:如果采用上述方式添加一个菜单项到 Search 主菜单,当我们运行时并没有出现添加的菜单项,这时候需要换一个 workspace,其原因是 Eclipse 缓存了与其相关的某些信息在 workspace 当中。

    用command方式的话还需要定义command类和handler类,由此看出如果使用command方式实现一个菜单,需要实现三步,还是在之前建立的RCP程序的基础上添加。

    1、定义command

    2、创建handler类(command中的defautHandler类也实现此功能)

    注意:如果同时定义了defaultHandler和Handler,会以defaultHandler为优先。

     

     

    package myrcp.handler;
    import org.eclipse.core.commands.ExecutionEvent;
    import org.eclipse.core.commands.ExecutionException;
    import org.eclipse.core.commands.IHandler;
    import org.eclipse.core.commands.IHandlerListener;
    import org.eclipse.jface.dialogs.MessageDialog;
    
    
    public class MenuHandler implements IHandler {
    
        @Override
        public void addHandlerListener(IHandlerListener handlerListener) {
    
        }
    
        @Override
        public void dispose() {
    
        }
    
        //执行方法
        @Override
        public Object execute(ExecutionEvent event) throws ExecutionException {
            MessageDialog.openInformation(null, "提示", "你点击了菜单1");
            return null;
        }
    
        //这里设置为true,不然是灰色不可用
        @Override
        public boolean isEnabled() {
            return true;
        }
    
        //这里也设置为true
        @Override
        public boolean isHandled() {
            return true;
        }
    
        @Override
        public void removeHandlerListener(IHandlerListener handlerListener) {
    
        }
    
    }

     

     

     

    3、这个command存在的位置

     

    然后添加个command,指定ID和名称就可以了

    工具条的话同理:

     

     

    看到这里,是不是感觉有点似曾相识的感觉,对,MVC。command方式就是把控制和展现分离开,不再像是以前写action那样把代码写死。

    这就不难理解为什么官方现在主推command方式而弃用actionSets了

     

    运行起来:

    发现工具条没有,这是因为我们没有设置工具条可见。

    进入ApplicationWorkbenchWindowAdvisor类修改:

    package myrcp;
    
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.ui.application.ActionBarAdvisor;
    import org.eclipse.ui.application.IActionBarConfigurer;
    import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
    import org.eclipse.ui.application.WorkbenchWindowAdvisor;
    
    public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
    
        public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
            super(configurer);
        }
    
        public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
            return new ApplicationActionBarAdvisor(configurer);
        }
        
        public void preWindowOpen() {
            IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
            //初始化大小
            configurer.setInitialSize(new Point(400, 300));
            //是否显示工具条
            configurer.setShowCoolBar(true);
            //是否显示状态栏
            configurer.setShowStatusLine(false);
            //RCP程序标题
            configurer.setTitle("Hello RCP"); //$NON-NLS-1$
        }
    }

     

    再次运行,成功:

     

    参考文章:

    http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-menuext/

    http://www.vogella.com/tutorials/EclipseCommands/article.html

  • 相关阅读:
    MVC设置默认页面
    MySQL_DBA整理
    解决git提交敏感信息(回退git版本库到某一个commit)
    并发数计算
    高并发下的 Nginx 优化与负载均衡
    PassengerNginxdebian快速部署Rails
    Linux+postfix+extmail+dovecot打造基于web页面的邮件系统
    2018.11.30软件更新公告
    2018.10.11软件更新公告
    2018.09.25软件更新公告
  • 原文地址:https://www.cnblogs.com/demonrain/p/3933910.html
Copyright © 2020-2023  润新知