Eclipse插件开发5——时间插件Timer开发实例详解

这里做的TimeHelper插件设定为在菜单栏、工具栏提供快捷方式,需要在相应地方设置扩展点,最后弹出窗体显示时间。

在上一篇文章里创建好了Time工程,在MANIFEST.MF的“扩展”选项卡里可以看到基本的插件扩展,当然这里最开始只有org.eclipse.core.runtime.application和org.eclipse.ui.perspectives,如下图所示:

下面我们就要添加插件扩展,首先要说明几个东西:

1.      commands:通过这个扩展可以自定义添加事件处理类(例如TimeHandler.java);

2.      menu:在菜单栏里扩展插件,并且这个之后是要绑定到commands上的,commands的事件处理类用以处理相应事件;

3.      toolbar:在工具栏里扩展插件,这个之后也需要绑定到commands上,commands的事件处理类用以处理相应事件;

在右侧点击“添加”按钮,即可添加相应扩展,这里添加三个东西:org.eclipse.ui.commands、org.eclipse.ui.menus(之后要在工具栏用)、org.eclipse.ui.menus(之后要在菜单栏用),添加好后如下图所示:

step1:新建commands并添加事件处理函数TimeHandler

在org.eclipse.ui.commands上右键→新建command,在右侧里设定名称name为Time,id设为rcpproject.commands.Time(这个id只是一个区分,怎么写都可以,只要不重复,之后就是通过这个id来找到相应的commands的)。

最主要的defaultHandler,这里双击defaultHandler超链接,就会提示创建一个新的处理类,这里在timer包下创建TimeHandler类,继承自org.eclipse.core.commands.AbstractHandler,接口为IHandler。代码如下:

package timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.handlers.HandlerUtil; public class TimeHandler extends AbstractHandler implements IHandler {
Date date = new Date(System.currentTimeMillis());
String str = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); public Object execute(ExecutionEvent event) throws ExecutionException {
MessageDialog.openInformation(HandlerUtil.getActiveWorkbenchWindow(event).getShell(),
"Time Helper", "Current time is " + str);
return null;
}
}

这里创建一个窗体,得到工作台事件.getActiveWorkbenchWindow(event),窗口标题为TimeHelper,对话框里显示当前时间。

step2:添加事件到工具栏

在org.eclipse.ui.menus上右键新建menuContribution,然后再右键新建toolbar(id设为SayTime),再右键新建commands,此时把commands绑定到之前写的处理类上,通过设定好的commandId来关联:此处设定为rcpproject.commands.Time(就是之前的org.eclipse.ui.commands的id)。当然,这里还可以添加icon,把图标添加上去,前提是之前你在icon文件夹下已经放好了相应图标元素。另外还可以设定tooltip,设置提示语为StartAlarm。

step3:添加事件到菜单栏

同样的方式,在下面第二个org.eclipse.ui.menus上右键新建menuContribution,然后再右键新建menu(id设为timeMenu),再右键新建commands,把commands绑定到之前写的处理类上,设定commandId关联:此处设定为rcpproject.commands.Time,同上操作。

运行程序,这里需要在运行配置里设置一下“Run a product”:org.eclipse.app.package.rcp.product

最后导出jar包,安装到plugins文件夹下,重启eclipse最终效果图:

该项目源码我已经commit到github,有兴趣的可以去看一下:https://github.com/DianaCody/Time.git,并且插件的jar包下载也在README.md文档里有下载链接,把jar包放到plugin目录下即可安装,jar包也可以到我的csdn资源页下载:http://download.csdn.net/detail/dianacody/7659081

【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解的更多相关文章

  1. 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解

    Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...

  2. Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解aaaaaa(转)

    Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解(转) (2012-03-28 15:06:54) 转载▼ 标签: .mymetadata ...

  3. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  4. Vue插件编写、用法详解(附demo)

    Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...

  5. Linq实战 之 Linq to Sql及Entity Framework操作详解

    Linq实战 之 Linq to Sql及Entity Framework操作详解 一:linq to db的框架 1. linq to sql 2. linq to ado.net entity f ...

  6. Sublime Text 编辑器 插件 之 "Sublime Alignment" 详解

    作者:shede333主页:http://my.oschina.net/shede333版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY- ...

  7. amazeui中的js插件有哪些(详解功能)

    amazeui中的js插件有哪些(详解功能) 一.总结 一句话总结: 二.amazeui中的js插件有哪些 1.UI 增强 警告框Alert 按钮交互Button 折叠面板Collapse 下拉组件D ...

  8. PHP用strtotime()函数比较两个时间的大小实例详解

    在PHP开发中,我们经常会对两个时间的大小进行判断,但是,在PHP中,两个时间是不可以直接进行比较,因为时间是由年.月.日.时.分.秒组成的,所以,如果需要将两个时间进行比较的话,我们首先要做的就是将 ...

  9. 如何在IDEA里给大数据项目导入该项目的相关源码(博主推荐)(类似eclipse里同一个workspace下单个子项目存在)(图文详解)

    不多说,直接上干货! 如果在一个界面里,可以是单个项目 注意:本文是以gradle项目的方式来做的! 如何在IDEA里正确导入从Github上下载的Gradle项目(含相关源码)(博主推荐)(图文详解 ...

随机推荐

  1. PHP中使用Redis

    Redis是什么 Redis ( REmote DIctionary Server ) , 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用 ...

  2. JavaScript删除确认框

    1〉 <a href="javascript:if(confirm('确实要删除吗?'))location='jb51.php?id='">删除</a>

  3. iOS 后台返回json解析出现的null的解决办法

    在后台返回值为Null为空时,我们代码没有判断时,程序就会崩溃.当时一直很疑惑是为啥,后来发现是数据问题,由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据.当我们通 ...

  4. RabbitMQ 内存和磁盘警告

    内存和磁盘警告 有两种情况下,Rabbit MQ会停止读取客户端的连接socket,为了防止crash崩溃,这两种情况是: 内存使用达到配置值 磁盘空间下降到配置值下 在这两种情况下,服务器会临时阻塞 ...

  5. mongodb 安装、启动

    MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1   最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据 ...

  6. 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ

    [BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...

  7. asp.net mvc4 之Webapi之客户端或服务器端安全控制

    一.WebAPI的工作方式 WebAPI的工作方式:HTTP的请求最先是被传递到HOST中的,如果WebAPI是被寄宿在IIS上的,这个HOST就是IIS上,HOST是没有能力也没有必 要进行请求的处 ...

  8. shapes

    接口 shape package shape; public abstract interface shape { public abstract void Draw(); public abstra ...

  9. php命名空间使用总结

    从php5.3开始可以使用命名空间,命名空间是为了防止命名 空间的元素重复而使用的.命名空间的元素包括:class.function.const(从php5.3开始在类外部也可以用const定义常量, ...

  10. ArcGIS服务器的feature图层限制

    今天遇到了esri.layers.FeatureLayer发布一个宗地图层,里面有些数据未显示,导致数据显示不全,原来是服务中数据返回参数限制. ArcGIS的feature图层(在JavaScrip ...