`

操作Action

 
阅读更多

 

 

IActionDelegate的子类型有IWorkbenchWindowActionDelegate为工作台窗口的菜单栏和工具栏提供生命周期事件,还有:

IEditorActionDelegate为编辑器中的操作提供生命周期事件;

IObjectActionDelegate为快捷键相关联的操作代理提供生命周期事件;

IViewActionDelegate为视图中的操作提供生命周期事件;

 

 

IWorkbenchWindowActionDelegate接口中的方法:

//每次执行该操作时,都会执行该方法,init方法只有第一次才会执行,后面就不会执行了

public void run(IAction action) 

//当用户焦点离开该操作创建的视图等等时,会执行该方法

public void selectionChanged(IAction action, ISelection selection) 

//该关闭eclipse时,才会调用该方法

public void dispose()

//当第一次执行该操作时,创建该对象后,首先执行init方法,然后执行run方法

public void init(IWorkbenchWindow window) 


 

 

操作可以在许多地方出现,如菜单栏、工具栏和上下文菜单,它丰富了编辑器的功能,增强的用户的体验。

eclipse中的操作既可以通过扩展点定义,也可以通过代码定义。

 

工具栏的按钮被分为多个组,每个组叫一个操作集(action set),用来集合一组相关的操作。

 

操作集扩展的使用(该扩展点主要是为了添加菜单栏和工具栏按钮的):

<extension

         point="org.eclipse.ui.actionSets">

      <actionSet

            //引用该操作的唯一标识符

            id="com.plugindev.addressbook.actionSet"

            //出现在window->customize perspective 中的标识符

            label="地址本操作"

            //表示初始状态是否可见

            visible="true">

         //用于定义出现在菜单栏中的菜单

         <menu

               //菜单的唯一标识符

               id="AddressBookMenu"

               //菜单的名称,还有个属性path表示在何处插入此菜单

               label="地址本">

            <separator name="content"/>

         </menu>

         定义操作

         <action

               //操作的代理,必须实现IWorkbenchWindowActionDelegate或者               //IWorkbenchWindowPulldownActionDelegate(实现下拉式的工具栏按钮)

               class="com.plugindev.addressbook.actions.OpenAddressViewAction"

               //操作的命令标识符,将该操作绑定到哪个命令上

               definitionId="com.plugindev.addressbook.commands.openAddressView"

               //与该操作关联的图像,出现在工具栏

               icon="icons/sample.gif"

               引用该操作的唯一标识符

               id="com.plugindev.addressbook.actions.OpenAddressViewAction"

               //出现在菜单中的名称

               label="打开视图"

               //表示操作出现在菜单栏中的位置,表示出入到上面定义菜单的content中

               menubarPath="AddressBookMenu/content"

               //表示操作出现工具栏中的位置,Normal为工具栏的标识符,addition是工具栏中的组

               toolbarPath="Normal/addition"

               //用于工具栏按钮的提示信息

               tooltip="在当前透视图中打开地址本视图"/>

      </actionSet>

   </extension>

 

 

 

视图操作包含视图上下文菜单、视图工具栏按钮、视图工具栏的下拉菜单。这些操作都可以通过编程的方式来实现。

popupMenus扩展点,可以为插件添加上下文菜单,并提供需要的菜单项。

 

<extension

         point="org.eclipse.ui.popupMenus">

      //与上下文特点对象相关联的操作,只有选择该对象才会出现该菜单

      <objectContribution

            //默认为fasle,指出适配IResource对象可接受的目标

            adaptable="false"

            //此操作的唯一标识符

            id="com.plugindev.addressbook.example.objectActionTest"

            //过滤器,表示可接受的目标名称

            nameFilter="T*"

            //表示可接受的目标类型,类型必须是String,其他类型不行

            objectClass="java.lang.String">

         <menu

               id="exampleMenu"

               label="示例菜单"

               path="additions">

            <separator name="example"/>

         </menu>

         <action

               //操作代理类,必须实现IObjectActionDelegate接口

               class="com.plugindev.addressbook.example.ObjExampleAction"

               //表示多选是否也支持该操作,+表示支持,1表示不支持

               enablesFor="1"

               id="com.plugindev.addressbook.objExampleAction"

               label="对象示例操作"

               menubarPath="exampleMenu/example"

               tooltip="举例说明如何添加对象操作"/>

      </objectContribution>

</extension>

 

IObjectActionDelegate接口中方法的调用时机:

//右键选择目标对象时,先调用这个方法后再调用select,每次右键选择都会执行这2个方法

public void setActivePart(IAction action, IWorkbenchPart targetPart)

public void selectionChanged(IAction action, ISelection selection)

//选择相应菜单项时,执行该方法

public void run(IAction action) 

 

 

 

<extension

         point="org.eclipse.ui.popupMenus">

  //为视图添加上下文菜单,针对所有的对象

  <viewerContribution

            id="com.plugindev.addressbook.example.viewerActionTest"

            //表示为哪个视图提供操作

            targetID="com.plugindev.addressbook.views.AddressView">

         <menu

               id="com.plugindev.viewToolbarMenu"

               label="示例工具栏菜单"

               path="additions">

            <separator name="example"/>

         </menu>

         <action

               //操作代理类必须实现IViewActionDelegate接口

               class="com.plugindev.addressbook.example.ViewerExampleAction"

               enablesFor="+"

               id="com.plugindev.addressbook.viewerExampleAction"

               label="查看器示例操作"

               menubarPath="com.plugindev.viewToolbarMenu/example"

               tooltip="举例说明如何添加查看器操作"/>

      </viewerContribution>

</extension>

 

 

 

<extension

         point="org.eclipse.ui.popupMenus">

 //为编辑器的上下文菜单提供操作

 <viewerContribution

            id="com.plugindev.addressbook.example.editorActionTest"

            //表示为哪个编辑器提供上下文菜单,在此表示eclipse默认的文本编辑器

            targetID="#TextEditorContext">

         <menu

               id="com.plugindev.defaultEditorMenu"

               label="示例编辑器菜单"

               path="additions">

            <separator name="example"/>

         </menu>

         <action

               //操作代理类必须实现IEditorActionDelegate接口

               class="com.plugindev.addressbook.example.EditorExampleAction"

               icon="icons/sample.gif"

               id="com.plugindev.addressbook.editorExampleAction"

               label="编辑器操作"

               menubarPath="com.plugindev.defaultEditorMenu/example"

               tooltip="举例说明如何添加编辑器操作"/>

      </viewerContribution>

</extension>

 

//用户定义编辑器的上下文菜单

<viewerContribution

            id="com.plugindev.addressbook.example.editorActionTest"

            targetID="#TextEditorContext">

         <menu

               id="com.plugindev.defaultEditorMenu"

               label="示例编辑器菜单"

               path="additions">

            <separator name="example1"/>

            <separator name="example2"/>

         </menu>

//只有action的ID不同,可以放置多个action,并定义它在菜单中出现的位置

         <action

               class="com.plugindev.addressbook.example.EditorExampleAction"

               icon="icons/sample.gif"

               id="com.plugindev.addressbook.editorExampleAction"

               label="编辑器操作2"

               menubarPath="com.plugindev.defaultEditorMenu/example1"

               tooltip="举例说明如何添加编辑器操作"/>

          <action

               class="com.plugindev.addressbook.example.EditorExampleAction"

               icon="icons/sample.gif"

               id="com.plugindev.addressbook.editorExampleAction2"

               label="编辑器操作2"

               menubarPath="com.plugindev.defaultEditorMenu/example2"

               tooltip="举例说明如何添加编辑器操作"/>

      </viewerContribution>

 

 

 

 

//此扩展点用于添加视图工具栏按钮

 <extension

         point="org.eclipse.ui.viewActions">

      //要和viewerContribution区别开来

      <viewContribution

            id="com.plugindev.addressbook.example.viewActionTest"

            targetID="com.plugindev.addressbook.views.AddressView">

         <action

               //操作代理类必须实现IViewActionDelegate接口

               class="com.plugindev.addressbook.example.ViewExampleAction"

               icon="icons/sample.gif"

               id="com.plugindev.addressbook.viewExampleAction"

               label="视图操作"

               menubarPath="com.plugindev.addressViewPullDownMenu/example"

               style="push"

               toolbarPath="additions"

               tooltip="举例说明如何添加视图操作"/>

         <menu

               id="com.plugindev.addressViewPullDownMenu"

               label="下拉菜单示例"

               path="addtions">

            <separator name="example"/>

         </menu>

      </viewContribution>

   </extension>

      </editorContribution>

   </extension>

 

 

为编辑器添加顶层工作台菜单和工具栏按钮,要扩展org.eclipse.ui.editorActions扩展点。与org.eclipse.ui.actionSets扩展点不同,后者对任何视图都可见,前者只对定义的

 

视图可见。

<extension

         point="org.eclipse.ui.editorActions">

      <editorContribution

            id="com.plugindev.addressbook.example.editorActionTest"

            //定义对默认的文本编辑器显示顶层菜单和工具栏

            targetID="org.eclipse.ui.DefaultTextEditor">

         <menu

               id="com.plugindev.defaultEditorMenu"

               label="顶层编辑器菜单"

               path="additions">

            <separator name="example"/>

         </menu>

         <action

               //操作代理必须实现IEditorActionDelegate接口

               class="com.plugindev.addressbook.example.TopEditorAction"

               icon="icons/sample.gif"

               id="com.plugindev.addressbook.TopEditorAction"

               label="顶层编辑操作"

               menubarPath="com.plugindev.defaultEditorMenu/example"

               style="push"

               toolbarPath="Normal/additions"

               tooltip="编辑器操作示例"/>

      </editorContribution>

   </extension>

 

 

键绑定策略

 

命令是键序列与相应操作之间的桥梁,当按下快捷键时,通过命令就可以找到相应的操作

操作通过定义 definitionId来与命令ID相关联,绑定通过定义commandId与命令ID相关联

 

<extension

         point="org.eclipse.ui.commands">

      //定义命令所属的类别

      <category

            description="地址本插件添加的命令"

            id="com.plugindev.addressbook.commands"

            name="地址本"/>

      <command

            categoryId="com.plugindev.addressbook.commands"

            description="打开地址本视图"

            id="com.plugindev.addressbook.commands.openAddressView"

            name="打开地址本"/>

      <command

            categoryId="com.plugindev.addressbook.commands"

            description="打开地址本视图222"

            id="com.plugindev.addressbook.commands.openAddressView22"

            name="打开地址本222"/>

   </extension>

   <extension

         point="org.eclipse.ui.bindings">

      <key

            commandId="com.plugindev.addressbook.commands.openAddressView"

            contextId="org.eclipse.ui.contexts.window"

            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"

            sequence="CTRL+SHIFT+V"/>

       <key

            commandId="com.plugindev.addressbook.commands.openAddressView22"

            //激活键序列时的上下文环境

            contextId="org.eclipse.ui.contexts.window"

            //激活键序列所使用的配置

            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"

            //键序列

            sequence="CTRL+SHIFT+V"/>

   </extension>

 

 

分享到:
评论

相关推荐

    Action bar 操作栏

    在Android应用开发中,Action Bar(操作栏)是界面设计中的一个重要组成部分,它为用户提供了一种统一且高效的交互方式。这个部分将详细讲解Action Bar的基本概念、功能、设计原则以及如何在代码中实现。 一、...

    uni-swipe-action组件实现列表项左划操作

    应用uni-swipe-action组件实现列表项左划操作。 真正做到开箱即用。

    Android action 分类大全

    Action是Intent的一个关键组成部分,它定义了想要执行的操作。本篇文章将详细介绍Android中的一些常见Action,并结合相关类别和使用场景,帮助开发者更好地理解和应用。 1. `ACTION_ADD_SHORTCUT`:此动作用于在...

    Windchill9.0 action与actionModel

    例如,当一个新产品设计被提交时,可能会触发一个“审批”Action,这个Action会通知指定的人员进行审批操作。Action可以是简单的,如发送电子邮件通知,也可以是复杂的,涉及多个步骤和条件判断。 Action的主要特点...

    使用通用Repository模式的CRUD操作的MVC程序例子

    // 其他CRUD操作Action... } ``` 这样的设计使得业务逻辑层与数据访问层之间的依赖关系变得非常清晰,同时,由于Repository是泛型的,所以它可以应用于项目中的任何数据实体,提高了代码的复用性。 在压缩包文件...

    JavaScript获取网页表单action属性的方法

    JavaScript获取网页表单的action属性是一种常用的操作,通常用于获取表单提交时要发送到的URL地址。在Web开发中,表单是用来收集用户输入数据并将其发送到服务器的HTML元素。action属性指定了表单提交后,服务器处理...

    action的三种类型

    - **重用机制**:通过将常见或复杂的操作封装为重用型Action,可以实现代码的复用。当测试需求发生变化时,只需要修改该Action,即可自动更新所有依赖此Action的测试,从而减少了代码重复编写所带来的工作负担。 - *...

    jsp自动调用action

    在Web开发中,尤其是在使用Java Server Pages (JSP)与Struts框架时,有时需要在用户访问某个初始页面(如欢迎页)时自动触发一系列后端操作(如执行某个Action)。这种需求可以通过多种方式实现,其中一种较为常见的...

    Action集中管理构建操作.txt

    ### Action集中管理构建操作 #### 一、简介与背景 在软件开发中,为了提高用户体验,通常会设计多种操作方式来实现同一功能,比如通过菜单命令、快捷键、工具栏按钮等方式来完成复制(Copy)操作。这不仅满足了...

    Android的ACTION说明文档

    ACTION是Intent中的一个关键属性,用于定义Intent的目的或操作。本文将深入探讨Android中Intent的ACTION,帮助开发者更好地理解和利用这一功能。 ACTION是Intent的一个字符串常量,用于描述Intent想要执行的操作。...

    C++术语表

    C++术语对照表 大全,abort() 特殊函数 如果一个函数抛出异常,但在通往异常函数的调用链中找不到与之匹配的catch,则该程序通常以此函数调用终止 abstract base class 抽象基类...action/decision model 操作判断模型

    Struts2的一个小实例

    3. 理解OGNL的使用,它允许在JSP页面中动态访问和操作Action对象的属性。 4. 学习Struts2的拦截器,它们可以实现如登录检查、日志记录等通用功能。 5. 掌握Action结果的类型和如何定义结果页面。 通过实践这个...

    Struts2源码分析

    它不直接包含Action实例,而是通过`ActionInvocation`来间接操作Action实例。默认的实现是`DefaultActionProxy`。 - **ActionInvocation**: 负责实际调用Action以及管理拦截器链。拦截器是在Action执行前后进行的...

    初级struts2应用-学生信息管理系统

    这些标签使得在JSP中直接操作Action属性变得更加简单,减少了对脚本的依赖。 标签列表中没有提供具体的文件名,但我们可以假设存在一些关键的JSP文件,如`student_list.jsp`用于展示学生列表,`student_add.jsp`...

    android Action call 拨打电话 Intent.ACTION.CALL

    在Android开发中,Intent是一个非常重要的组件,它用于在应用程序的不同组件之间传递消息,执行特定的操作,如启动活动(Activity)、启动服务(Service)等。当我们想要从应用中拨打电话时,就需要用到Intent ...

    Android自定义action与permission_java_action_

    Action是Android Intent系统的核心组成部分,它定义了应用程序可以执行的操作。Intent是一种消息传递机制,用于启动其他组件(如Activity、Service或BroadcastReceiver)来执行特定任务。自定义Action允许开发者创建...

    Struts2_1200_AccessWebElements

    你可以用OGNL来访问Action对象的属性,如`#{user.username}`,这使得在JSP页面上可以直接显示或操作Action中的数据。 4. **Struts2 Interceptors(拦截器)** 拦截器是Struts2中实现AOP(面向切面编程)的重要机制...

    SWT_JFace_in_action_jface_action_

    Action不仅包含了操作的执行代码,还可以设置状态,如是否启用、图标等,使得UI元素可以根据Action的状态动态更新。 书中可能涵盖了以下内容: 1. SWT基础:包括组件的创建、布局管理、事件处理等。 2. JFace入门...

    C++ Concurrency in Action_C++_action_

    《C++ Concurrency in Action》是一本深入探讨C++并发编程的权威著作,作者是知名软件开发者、C++专家Anthony Williams。这本书旨在帮助C++程序员理解和掌握如何在现代多核处理器环境中有效地使用并发和并行编程技术...

Global site tag (gtag.js) - Google Analytics