`

使用Commands Framework创建菜单

阅读更多

最开始的时刻,都是使用org.eclipse.ui.popupMenus (上下文菜单)和org.eclipse.ui.actionSets(视图菜单,主菜单)来创建Eclipse菜单。

 

原来都是使用下面的方式来创建菜单:

 

   <extension point="org.eclipse.ui.popupMenus"> 
      <objectContribution 
         id="com.xyz.C1" 
         objectClass="org.eclipse.core.resources.IFile" 
         nameFilter="*.java"> 
         <menu
            id="com.xyz.xyzMenu" 
            path="additions" 
            label="&amp;XYZ Java Tools"> 
            <separator name="group1"/> 
         </menu> 
         <action
            id="com.xyz.runXYZ" 
            label="&amp;Run XYZ Tool"
            style="push"
            menubarPath="com.xyz.xyzMenu/group1" 
            icon="icons/runXYZ.gif" 
            helpContextId="com.xyz.run_action_context" 
            class="com.xyz.actions.XYZToolActionDelegate" 
            enablesFor="1" /> 
      </objectContribution> 

 

 同样Eclipse也提供了Commands Framework框架来创建菜单,使用CommandsFramework需要用到3个扩展点:

  org.eclipse.ui.commands

  org.eclipse.ui.handlers

  org.eclipse.ui.menus

 

org.eclipse.ui.commands

命令定义。

  · id 该command的唯一标识,在handler和menu都会用到这个id。

  · name 该命令的名字,可以起到一个翻译解释的作用。如果在menu的label属性没有定义时,在界面上会显示该name的值。

 · defaultHandler 默认处理类,如果该commandId没有被绑定到handler扩展点,那么就会调用该defaultHandler处理类(这个属性还与IExecutableExtension有联系)。

 

   <extension
         point="org.eclipse.ui.commands">
      <command
            defaultHandler="com.winse.eclipse.examples.handler.HelloHandler"
            id="com.winse.eclipse.examples.command.hellocmdusedefault"
            name="Hello CMD use DefaultHandler">
      </command>
      <command
            id="com.winse.eclipse.examples.command.hellocmd"
            name="Hello CMD">
      </command>
   </extension>

 

当menus扩展点中没有定义label属性时,会在界面中显示command的name属性。



 

org.eclipse.ui.handlers

这个用于设置处理类。需要处理的对象可以通过HandleUtil获得。

  · commandId 绑定到的command,既上面的org.eclipse.ui.commands扩展点设置的id。

  · class 处理类

 

   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="com.winse.eclipse.examples.handler.HelloHandler"
            commandId="com.winse.eclipse.examples.command.hellocmd">
      </handler>
   </extension>

 

public class HelloHandler extends AbstractHandler {

	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {
		MessageDialog.openInformation(
				HandlerUtil.getActiveWorkbenchWindow(event).getShell(),
				"Hello.", "my first eclise command framework example.");
		return null;
	}

}

   

org.eclipse.ui.menus

定义命令出现的位置。

  · locationURI 定义menu节点的插入点。这个重点难点,这个参数请参考最后的链接。

 · id 菜单(menu或command)的标识,可以用于locationURI的after与before来进行菜单的排序。

 · label 菜单的显示名称(可选,如果没有填写,会使用命令的name属性,但推荐在这里定义)。

 · commandId 需要执行的命令Id。

 

   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               id="fileMenu"
               label="file">
            <command
                  commandId="com.winse.eclipse.examples.command.hellocmd"
                  label="Hello"
                  style="push">
            </command>
            <command
                  commandId="com.winse.eclipse.examples.command.hellocmdusedefault"
                  id="hellodefault"
                  style="push">
            </command>
         </menu>
      </menuContribution>
   </extension>

 

完成上面三个扩展点的定义后,就可以来进行测试了。

我们的命令放置在主菜单栏上(menu:org.eclipse.ui.main.menu),所以,我们可以看到如图效果:



 

传统的actionSets, editorAction这些扩展点的方式与命令框架的CommandFramework之间其实没有太多的比较可言了。但CommandFramework提供了菜单创建的统一方式locationURI,不需要去学习很多扩展点的使用;同时,我们Command可以复用,我们甚至可以无需知道命令是怎么实现的,例如退出eclipse的exit命令,我们只需要定义一个menus,然后复用这个command即可(我觉得这个是它最大的优势);还有就是可以很方便的绑定快捷键bindings。

 

      <menuContribution
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               label="File">
            <command
                  commandId="org.eclipse.ui.file.exit"
                  label="Exit">
            </command>
         </menu>
      </menuContribution>

 

 

参考资料:

1 研读 http://wiki.eclipse.org/Menu_Contributions#Menu_URIs 一文,从中获取如何使用 menuContribution, locationURI 。

2 阅读 http://wiki.eclipse.org/Command_Core_Expressions 一文,理解 Eclipse Command 表达式的用途。

3 深入理解菜单(Menu)功能及其扩展点 http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-menuext/index.html 

4 http://www.vogella.com/articles/EclipseCommandsAdvanced/article.html

5 http://www.vogella.com/articles/EclipseCommands/article.html

 

 

  • 大小: 2.8 KB
  • 大小: 28.5 KB
分享到:
评论

相关推荐

    Eclipse Commands Framework教程

    - **定义**: Eclipse Commands Framework 是一种用于创建和管理Eclipse应用中命令、菜单和工具栏的机制。 - **功能**: - 创建命令(Command)。 - 定义命令处理程序(Handler)。 - 将命令集成到菜单和工具栏中。 - ...

    PDM Creating Menu Commands

    使用C#,开发者可以创建.NET Framework上的dll(动态链接库),这些库可以被SolidWorks PDM调用,执行用户定义的命令。 4. **创建过程**: - 首先,设置开发环境,安装Visual Studio和SolidWorks SDK,后者提供了...

    实现步骤以及功能说明文档1

    这可能包括使用ADO.NET或Entity Framework等技术,连接到数据库,执行SQL语句来创建、读取、更新和删除数据。 这个应用程序结合了Windows窗体界面设计和GIS功能,同时涉及数据库操作,为用户提供了一种交互式的地图...

    使用Eclipse+Lomboz+Tomcat+Jboss搭建环境.doc

    - 使用`Windows -&gt; Customize Perspective -&gt; Commands` 将Lomboz Action添加到工具栏。 完成上述步骤后,你已经成功地搭建了一个Eclipse + Lomboz + Tomcat + Jboss的开发环境,可以开始进行Java EE应用的开发了...

    微信开发框架(WTF)WechatFramework.zip

    Wechat Framework(微信开发框架,简称WTF)能帮助开发者快速搭建微信公众号开发环境,开发者在自己的微信公众号开发项目中引入本框架后,仅需简单的几步配置即可获得消息接收、解析、回复等功能,同时还有菜单创建...

    eclipse插件开发.zip

    总结来说,Eclipse插件开发涉及了插件项目的创建、扩展点和扩展的使用、UI元素的定制、模型和服务的设计以及调试和部署等多个方面。通过学习和实践,开发者能够根据实际需求定制属于自己的Eclipse开发环境,提升开发...

    ArcGIS Engine+C#实例开发教程(PDF版)

    - **创建菜单**:在MenuStrip中添加菜单项,例如文件(File)、编辑(Edit)、查看(View)等。 - **添加子菜单**:为每个菜单项添加子菜单项,例如文件菜单下的打开(Open)、保存(Save)等。 **知识点8:事件处理** - **...

    ionic手机APP开发从入门到精通,环境搭建到创建自己的APP

    - 更多关于模板的详细信息,请参考[Ionic官方文档](https://ionicframework.com/docs/cli/commands/start)。 #### 五、框架目录结构 - 创建的新项目通常会有一个标准的目录结构,包括但不限于: - `src`:存放所有...

    dx修复工具

    There are 7 types of commands, which are language commands, form style commands, security level commands, enhanced repairing commands, c++ repairing configuration commands, DirectDraw configuration ...

    create-sublime-plugin-js:使用JavaScript创建Sublime Text 3插件

    在本文中,我们将深入探讨如何使用JavaScript来创建Sublime Text 3插件。Sublime Text是一款广受欢迎的代码编辑器,支持多种编程语言,并且拥有强大的可扩展性,用户可以通过编写插件来增强其功能。JavaScript是...

    eclipse插件开发---简单例子

    一旦掌握了基础,你就可以继续探索更复杂的插件开发,如使用PDE(Plug-in Development Environment)工具集、使用RCP(Rich Client Platform)创建桌面应用程序,甚至参与Eclipse社区的开源项目。

    Office Ribbon.rar

    Fluent.Ribbon是一个.NET Framework的开源库,它允许开发人员在WPF(Windows Presentation Foundation)应用程序中轻松创建和自定义Ribbon界面。 首先,Fluent.Ribbon库的核心是Fluent.dll,这是一个专门为WPF设计...

    Eclipse-4-RCP教程

    - **菜单和工具栏**:学习如何在Eclipse RCP应用中创建和定制菜单及工具栏。 #### 十七、增加菜单练习 - **添加菜单**:实践如何在Eclipse RCP应用中添加菜单项。 - **上下文菜单**:了解如何为表格等UI元素添加上...

    Eclipse SDK Undoable Operation Support

    在这种情况下,可以通过实现`org.eclipse.core.commands.ICompoundOperation`接口来创建复合操作。复合操作可以包含多个子操作,当它被撤销或重做时,其所有子操作都会一起撤销或重做。 此外,Eclipse还提供了命令...

    Spring Rich Client

    接下来,我们将逐步介绍如何使用Spring Rich Client创建一个简单的富客户端应用。 #### Spring Rich Client框架快速解析 ##### 富客户端应用程序结构 Spring Rich Client中的应用程序通常包含以下几个关键部分: ...

    QT白皮书 版本4.4

    - **主窗口(Main Window Features)**:QT提供了主窗口类,它包含了菜单栏、工具栏等常见的窗口组件,使得开发者可以轻松创建具有完整功能的应用程序主界面。 - **对话框(Dialogs)**:除了主窗口外,QT还支持多种类型...

    QT-4 programming

    主窗口通常是应用程序的主要入口点,它包含菜单栏、工具栏、状态栏以及其他一些重要的小部件。Qt 提供了丰富的 API 来定制这些元素,使开发者能够轻松地创建功能强大的用户界面。 **3.2 对话框 (Dialogs)** 对话框...

    Qt4.7官方白皮书

    - **QMenu**:用于创建下拉菜单,可以包含多个选项。 - **QToolBar**:用于放置工具按钮和其他常用操作,通常位于主窗口顶部。 - **QStatusBar**:显示简短的信息或状态提示。 - **Actions**:表示可以执行的操作,...

Global site tag (gtag.js) - Google Analytics