- 浏览: 538365 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理解它,现在开始好好学习学习,主要是看"Building Commercial-Quality Plug-ins"写的
Action的组成包括几个部分,一个是在plugin.xml中的声明,一个是在Eclipse UI中会用到的IAction实例化对象, 另一个是封装在IActionDelegate中的action执行代码. action的实例化是基于plugin.xml配置文件和IActionDelegate定义的,Eclipse可以先在界面上将action显示出来,直到用户点击了菜单或者工具条按钮才会去真正的加载插件,这也就是所谓的Eclipse的延迟加载机制
IActionDelegate有几个子类需要说明一下:
IActionDelegate2 如果实现IActionDelegate需要一些其他的信息,而这些信息在IActionDelegate销毁时需要同时被销毁时, 它可以提供相关是生命周期事件方法来处理
IEditorActionDelegate 是跟editor相关的
IObjectActionDelegate 是跟上下文菜单相关的
IViewActionDelegate 是跟view相关的
IWorkbenchWindowActionDelegate是跟menubar和toolbar相关的
Actions和Eclipse中的其他东东一样,也是通过扩展点org.eclipse.ui.actionSets来添加到Eclipse IDE的各个地方,actions的外在表现形式主要有menubar, toolbar, context menu这样几种
在actionSets的下级节点是actionSet, 它有几个属性,id,label都不用说了,还有一个visible属性,表示在打开Eclipse时是否显示该action,通常我们可以通过Window > Customize Perspective...来设置action是否可见
在actionSet下可以添加menu节点, 它的id,label属性不用说了,其中的path是用来指定菜单的显示位置的,一般设置为additions
action并不是直接添加到menu上的, 而是跟menu内部的group关联的,所以我们必须先在menu下创建group,即新建groupMarker, 其name必须保证在当前menu下唯一, menu还有一种叫separator的group, 在separator group处添加的menu item会在这个组中的第一个菜单项上面添加一条水平线.而groupMarker则不会有线, 当其他action要添加到该menu group下时,使用水平线进行分组就显得非常必要
group只是用来标识menu的位置,即指这个位置可以添加菜单项, 而不是实际的menu item, 实际的menu item是action
因为menu会有层次关系,所以actionSet中专门用一个menu节点来表现这种层次关系, 而toolbar则没有这种情况,所以这里没有提供toolbar节点
在actionSet下添加action就是最终我们要toolbar上显示的按钮和menubar上的menu item, 这里有几个属性, id和label不用说了,menuBarPath是menu要显示的位置, 比如"com.qualityeclipse.favorites.workbenchMenu/content",这个值就是actionSet+"/"+group name, toolbarPath 就是toolbar item的显示位置, 比如"Normal/additions", 还有几个属性不常用到,但是有必要解释一下
allowLabelUpdate这个要在retarget属性为true的时候有效,还不是很清楚
class 是menu或button要执行的动作, 如果使用的是pulldown风格的action,还需要实现IWorkbenchWindowPulldownDelegate接口,它的构造函数是无参数的,如果要传递参数,还需要是要实现IExecutableExtension 接口, 这个接口还不是很清楚
definitionId 这个是用来指定action对应的command唯一标识符的
enablesFor 是一个表达式,用来表示当前action是否可用
retarget 不是很理解
state主要是针对style属性为radio和toggle的,表示当前action是否被选中
style:默认是push,还有radio,表示一组menu中只能有一个被选中, toggle当它是checkbox好了, pulldown说明是子菜单项或者是下拉toolbar menu
对于action所使用的图标,我们可以从Eclipse下的plugins\org.eclipse.ui_3.1.2.jar 和 plugins\org.eclipse.jdt.ui_3.1.2.jar得到一些gif的图片
Eclipse中actionSet以及下级元素都是有id的,而且他们可以通过一种path的方式来进行指定,比如com.qualityeclipse.favorites.workbenchMenu/content,如果上一级节点是workbench menu bar或者是view content menu的话,那么它的上一级节点是不用指定的,只要指定group就好
为了方便其他的插件的action能添加到该插件的actionSet下, 在为插件定义group的时候, 会添加一个为additions的group, additions是eclipse使用的一个默认标识符,用来表示其他action或menu显示的位置, 在class中它的对应常量是IWorkbenchActionConstants.MB_ADDITIONS, 比如我们定义了一个menu,指定其path为additions, 这表示我们的menu将添加到window的左边,因为这个就是workbench menubar的additons所在的位置, 如果指定的是window/additions, 那么将作为子菜单项添加到window下
当一个actionSet下定义的action跟另一个actionSet下定义的menu关联的时候将发生Invalid Menu Extension (Path is invalid): some.action.id的异常, 为了避免这种问题,menu需要在两个actionSet都定义
toolbarPath的指定也跟menuBarPath有同样的情况, 比如定义为Normal/additions, 这里的Normal指的是workbench toolbar, additions就是action要显示的group位置
action的class属性是封装了执行动作的类,它实现了IWorkbenchWindowActionDelegate, 在它里面有几个方法需要介绍一下, 一个是selectionChanged, 用来动态修改action的state状态值, 是否可用,以及action的text属性等, 比如对于enableFor属性来说, 它根据选中对象的数量来判断action是否可用, 但是通过selectionChanged可以通过当前选定的对象的情况来调用setEnable()方法从而更精确的控制action是否可用, 有时候当插件还没有加载,在调用action的run方法时会加载插件,这时可能在调用run()方法之前没有调用selectedChange方法, 因此在run()方面里面需要写一些防护性代码,比如空值的判断之类的, 另外run()是在主UI线程中执行的,因此,如果该执行耗时较长,需要将其放到后台线程中执行.
插件运行之后在menubar和toolbar上看到定义的actionSet,可以试试下面的方法:
在Window > Customize Perspective... 下看看是不是actionSet没有选中
使用Window > Reset Perspective刷新当前视图
关闭重新打开当前视图
如果还没有出来,可以在在run或者debug的设置中将"Clear workspace data before launching "选中, 然后再启动运行
虽然通过扩展点可以非常方便的在Eclipse上添加,但是这个玩意儿多了也不是什么好事, 可能会降低用户体验,因此需要进行控制, actionSet扩展点也有相关的设置来指定是否可见, 而且还可以调用IActionSetDescriptor.setInitiallyVisible() 来控制顶层菜单是否可见, 另一种解决办法就是在首选项中提供一个checkbox让用户决定是否显示顶层菜单,其编程实现就是在代码中调用IActionSetDescriptor.setInitiallyVisible()和IWorkbenchPage.hideActionSet()来进行控制
发表评论
-
eclipse jdt builder的资料
2014-07-11 15:27 971eclipse jdt关于builder的英文资料。。。。 ... -
eclipse 插件开发 Setting the Java build path
2014-06-04 11:00 1229JDT Plug-in Developer Guide & ... -
RCP MessageConsole设置显示的最大行数
2013-09-05 11:34 999MessageConsole.setWaterMarks(5 ... -
RCP FileSystem 文件系统
2013-02-19 10:42 1392public static File toLocalFile ... -
eclipse4.x 去掉quick access
2013-01-11 14:57 4078/** * 去掉quick access * ... -
RCP 分页组件
2012-12-26 16:59 1534http://www.eclipse.org/nebula/w ... -
jdt 核心知识
2012-11-27 21:39 1311jdt官方核心知识...................... ... -
jdt 创建java工程,生成代码,运行main方法
2012-11-27 10:50 2379public static IJavaProje ... -
SWT 隔行换色-自动宽高调整
2012-10-16 17:32 1726** * 创建:ZhengXi 2009-8-4 */ ... -
RCP 为action添加操作进度条
2012-10-16 13:59 1310public class StartAction extend ... -
RCP 视图交互 ISelectionProvider和ISelectionListener,只响应鼠标左键
2012-10-10 18:36 2259有时候一个视图( V ... -
采用jface dataBinding来实现内容填充
2012-07-27 15:42 1223//采用jface dataBinding来实现内容填充 ... -
RCP 在视图中获得首选项修改后的结果
2012-07-27 15:35 1180在视图或者编辑器中加入如下代码: Activator.get ... -
RCP获得eclipse的相关位置
2012-07-24 11:14 1101InternalPlatform.getDefault().g ... -
swt/jface 获取table所有的列的值
2012-07-24 09:24 1451TableItem [] items = table.get ... -
org.eclipse.swt.SWTException: Subclassing not allowed
2012-07-19 15:09 1253org.eclipse.swt.SWTException: S ... -
Job found still running after platform shutdown.
2012-06-29 16:40 1882Job found still running after p ... -
eclipse插件开发 打开指定透视图
2012-06-12 14:08 1474打开透视图 PlatformUI.getWorkbench( ... -
eclipse 插件开发,报错No property tester contributes a property....
2012-06-12 11:29 2147ENTRY org.eclipse.ui.navigator ... -
eclipse JDT相关知识
2012-06-11 10:14 4018Java项目模型 Eclipse的项目有很多种,包括J ...
相关推荐
Eclipse Action 深入学习涉及了许多核心概念和机制,它是Eclipse插件开发中不可或缺的部分,用于构建用户界面的交互元素,如菜单、工具栏和上下文菜单。以下是对这些概念的详细解释: 1. **IActionDelegate**: ...
《Eclipse In Action》是一本深入探讨Eclipse集成开发环境(IDE)的专业书籍,被誉为学习Eclipse的必备宝典。本书全面覆盖了Eclipse的各项功能和应用,旨在帮助开发者充分利用这个强大的工具提升开发效率和代码质量...
Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...
第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包括行为(Action)、视图(ViewPart)、编辑器(Editor)、透视图(Perspective)等10章的内容;第三篇主要讲述插件开发的高级内容,包括开发高级内容...
Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...
第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包括行为(Action)、视图(ViewPart)、编辑器(Editor)、透视图(Perspective)等10章的内容;第三篇主要讲述插件开发的高级内容,包括开发高级内容...
1. **Eclipse IDE基础** Eclipse是一个开源的、跨平台的开发工具集成平台,最初由IBM贡献给开源社区。书中会介绍Eclipse的基本安装、配置和工作环境设置,包括如何定制工作空间、创建和管理项目。 2. **Java开发**...
1. **Eclipse安装与配置**:介绍如何下载和安装Eclipse,以及根据个人需求配置工作空间和插件,包括JDT(Java Development Tools)和其他语言支持。 2. **项目管理**:讲解如何创建、导入和组织项目,理解工程结构...
第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包括行为(Action)、视图(ViewPart)、编辑器(Editor)、透视图(Perspective)等10章的内容;第三篇主要讲述插件开发的高级内容,包括开发高级内容...
第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包括行为(Action)、视图(ViewPart)、编辑器(Editor)、...
### Eclipse in Action: 第二章知识点详述 #### 一、获取Eclipse 在开始学习Eclipse之前,首先需要从Eclipse官方网站下载安装软件。Eclipse官网提供了多种版本供用户选择,具体可以从以下地址访问:...
Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...
1. **Eclipse安装与配置**:书中会详细介绍如何下载和安装Eclipse,以及如何根据个人需求定制工作环境,包括选择合适的Eclipse版本、设置工作空间、安装必要的插件等。 2. **工作台和视图**:Eclipse的工作台是一个...
1. 创建菜单和工具栏:通过编程或者使用Eclipse的图形化工具(如Perspective Editor和Action Set Editor)来添加菜单项和工具栏按钮。 2. 绑定事件处理:为菜单项和工具栏按钮关联相应的事件处理器,实现功能逻辑。 ...
Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...
【标题】"ViewDragHelper初步学习 Eclipse版本"涵盖了Android开发中的一个重要组件——ViewDragHelper,这是一个用于在ViewGroup中处理视图拖放的工具类。在这个项目中,开发者提供了Eclipse版本的源代码,便于初学...
1. **Eclipse安装与配置**:书中会详细讲解如何下载并安装Eclipse,以及根据个人需求进行定制化配置,包括JDK版本选择、工作空间设定、插件安装等。 2. **Eclipse界面与工作流**:介绍Eclipse的工作台布局、视图...