- 浏览: 2469545 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
以前做插件用到的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()来进行控制
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()来进行控制
评论
2 楼
ywz1984
2009-01-08
引用
[/align][align=center]
[color=brown]
1 楼
tvjody
2008-01-11
写得蛮好,排版有点乱
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21926原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2209在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4527知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4151GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7940以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4079filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5201Object Action 这种Action是跟弹出的上下文菜 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5671错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5500内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6723最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9986JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4937List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4668在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5252修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9583这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5154在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4057在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3376Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2105java.lang.IllegalAccessError: t ... -
如何判断一个eclipse的版本的代码
2007-08-23 15:41 2963java 代码 String version = ...
相关推荐
Eclipse Action 深入学习涉及了许多核心概念和机制,它是Eclipse插件开发中不可或缺的部分,用于构建用户界面的交互元素,如菜单、工具栏和上下文菜单。以下是对这些概念的详细解释: 1. **IActionDelegate**: ...
【Eclipse插件开发学习笔记】 Eclipse插件开发是一个涉及多方面技术的过程,主要包含以下几个核心知识点: 1. **Eclipse平台结构体系**:Eclipse是一个基于插件的架构,其核心是一个小型的内核,大部分功能由各种...
本篇将基于"《Eclipse插件开发学习笔记》(ch11-12)"的内容,深入讲解Eclipse插件开发中的两个关键概念——视图(Views)和操作(Actions)。 **第11章 操作(Actions)** 在Eclipse插件开发中,操作(Actions)是...
以下是对Eclipse RCP插件开发学习笔记1-14章的详细知识点解析: 1. **第1章 Eclipse平台简介**: - Eclipse平台是基于OSGi(Open Service Gateway Initiative)标准的,提供了插件模型,使得开发者可以构建、运行...
以上就是Struts2学习笔记中涵盖的主要知识点,这些内容涵盖了从基础到进阶的应用,对于理解和掌握Struts2框架至关重要。尽管对于初学者来说可能有些复杂,但随着深入学习,你会发现Struts2的强大和实用性。
这个“Cocos2d-android-1学习笔记”正是针对初学者或者正在深入学习Cocos2d-x在Android平台应用的开发者所准备的资料。 首先,笔记可能会涵盖Cocos2d-x的安装与环境配置,这包括下载源码、设置NDK路径、配置Android...
### JBoss ESB 学习笔记知识点概览 #### 一、搭建ESB开发环境 - **工具准备**: - Eclipse-JEE 3.5:集成开发环境,支持Java EE标准,适合企业级应用程序开发。 - jbossesb-server-4.7:JBoss ESB的具体版本,为...
**JSP完全学习笔记概述** JSP(JavaServer Pages)是一种动态网页技术,它结合了HTML、Java代码和脚本语言,使得开发者可以方便地创建交互式的Web应用程序。本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签...
通过对 Liferay Portal 6 的深入学习和实践,开发者不仅可以掌握其核心技术和开发流程,还能了解相关的行业标准和技术趋势。无论是对于个人能力的提升还是项目的成功实施,都有着重要的意义。希望本篇学习笔记能够...
### Struts框架基础知识点 #### 一、Struts框架简介 **Struts**是一个开源的MVC(Model-...此过程不仅涵盖了Struts框架的基本使用方法,还深入介绍了其工作原理及配置方式,有助于初学者快速掌握Struts框架的应用。
第1章:带着你为一个简单的对象创建测试。在此过程中介绍了单元测试的好处,理念,和方法。 随着测试越来越复杂,我们把用junit创建更好的测试方案来展现。 第2章:进一步深入研究了Junit的类,生命周期和框架。...
### Struts2.0 学习笔记 #### 引言 Struts2 是一款非常流行的 Java Web 开发框架,它基于 Struts1 进行了重大的改进与优化,不仅继承了 Struts1 的优秀特性,还在此基础上进行了扩展,支持更加丰富的功能,如拦截...
6. **源码解析**:深入学习 Struts 1.3.8 的源码有助于理解框架内部的工作流程,例如 ActionServlet、Dispatcher、PlugIn 等关键类的作用。通过源码分析,开发者可以更好地定制和扩展框架功能,解决特定场景下的问题...
本篇学习笔记将引导我们从零开始,通过一个简单的"HelloWorld"项目,了解Struts2的基础知识。 首先,我们需要在本地环境中搭建Struts2的开发环境。这包括安装JDK、配置Java环境变量、下载Apache Struts2的最新版本...
这个版本的学习笔记主要集中在 Struts 框架的核心概念、架构和实际应用上。Struts 1 提供了一个MVC(Model-View-Controller)设计模式的实现,帮助开发者组织应用程序的逻辑,提高代码的可维护性和可扩展性。 在...
在深入学习 Struts 1.3.8 时,我们需要了解以下几个关键知识点: 1. **MVC设计模式**:Struts 是 Model-View-Controller (MVC) 设计模式的实现,它将业务逻辑、数据和用户界面分离,提高了代码的可维护性和可扩展性...
### Struts 1.x 学习笔记 #### 一、MVC 概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用程序开发中非常常见。它将应用程序分为三个核心部分: 1. **模型(Model)**...