Eclipse插件开发笔记一:对Eclipse的理解
来源:互联网 发布:mac移动硬盘加密 编辑:程序博客网 时间:2024/04/29 01:05
在Eclipse的结构中,最下面是Runtime;在Runtime的上面,有两部分,一部分是Resource;一部分是SWT、JFace和UI。
在Eclipse中,workspace、project、Folder、File都是Resource;Eclipse IDE启动后,选择的Workspace对应的一个大的文件夹,该文件夹下面有多个Project的文件夹和一个.metadata的文件夹存储workspace的信息。在启动过程中,选择的Workspace下的所有project都会被导入内存,在内存中形成一个一个的对象,这些对象就是IProject、IFile;甚至,java文件生成class文件,都在内存中有一个对应的对象。由于Eclipse可以支持多种类型的项目,比如Java项目、C++项目、C#项目,每一种类型的项目都有特定的组织结构,以Java项目为例,它编译生成的class文件被存储在bin目录下,有一个Java Model的类,就是用来生成Java项目模型的。
Eclipse的架构是一个runtime core,在这个core的上面,全部都是插件。Resource就是一个插件,叫ResourcePlugin。那么,我如何访问插件中的数据信息呢?有几种方法;如果我本身就在插件内部,直接访问插件内部的数据就可以了;如果我是另外一个插件,怎么访问呢?一种办法就是由core来维护这个数据;一种方法就是直接访问这个插件来获取这个数据(如果被访问的插件提供了访问特定数据的接口的话)。
如果我在自己的插件中,要访问工作区的某个项目,就是用ResourcePlugin.getWorkspace();由此可见,使用的前面所说的最后一种方法(直接访问插件来获取数据)。同理,如果我要在自己的插件中实现这样一个功能:改变某个选项会改变另一个插件中的状态。那么,前提是另一个插件提供了接口能够被改变。
如果我要在自己的插件中,访问当前选中的项目,那么,仅仅是ResourcePlugin就不够了,因为ResourcePlugin只是负责管理Resource,它并不知道当前选中的是哪一个Project,也不知道当前选中的是Project还是File;这部分的信息由UI管理。
Eclipse runtime core上一层的另外一部分就是SWT、JFace和UI。
什么是SWT?SWT就是一组原生态的小窗口组件集。什么是JFace?SWT中的数据都是一些简单的、基本的数据,JFace在SWT的基础上提供了更多的数据类型接口,比如Tree、List等。
在SWT和JFace中,有一些概念,比如Widget、Control;比如Listener、Action、ISelection;这些概念都是很好理解的。
假设我们要做一个简单的窗口系统,该怎么做?就是管理好X、Y、Z;在内部维持一个链表,这个链表中的每一个节点都是一个窗口;窗口在链表中的位置代表了它们在Z轴上的位置;在每一个节点中,记录了X、Y、W、H,代表了窗口的位置和大小。
当一个点击事件在窗口系统上发生时,窗口系统就去这个链表中查找,看这个点在哪个窗口中,然后把事件传递给这个窗口;这个窗口对这个点击事件进行转换,按照自己的逻辑,将转换后的事件传出去,于是,窗口变成了控件。
窗口系统知道当前有哪几个窗口是可见的,当需要绘制时,按照它们在Z轴上的位置,依次调用这几个窗口的绘制方法就OK了。
这是最简单的窗口系统,一般来讲,X、Y、W、H还有窗口的状态信息都是存储在窗口对象中的,窗口对象会提供接口使外部能够获取这些状态;例如,某个点是否在该窗口中,boolean isPtIn(int x,int y);
在窗口创建时,需要把自己注册进窗口系统中。这个注册的操作,一般都是封装了的。比如Win32中的CreateWindow。
在SWT中,所有的小窗口组件都是继承自Control(org.eclipse.swt.widgets.Control);这个Control有很多addListener方法。比如MouseMove、Focus、Key;当添加了这些Listener后,当事件在Control上发生后,Eclipse的窗口系统会将对应的事件传递给Control;而继承了Control的控件(例如Button)会按照自己的逻辑将事件转换后发出新的事件(例如SelectionEvent)。
ISelection与IAction;
IAction代表了一个点击的事件,这个事件中有command id;ISelection代表的是选中;因此,ISelection属于org.eclipse.jface.viewers包;而IAction属于org.eclipse.jface.action包;
- Eclipse插件开发笔记一:对Eclipse的理解
- Eclipse插件开发学习笔记 (一)
- Eclipse插件开发(一)
- eclipse插件开发(一)
- eclipse插件开发(一)
- Eclipse插件开发笔记
- eclipse插件开发笔记
- Eclipse插件开发之Facet开发笔记
- Eclipse插件开发中各种路径的获取(一)
- eclipse插件开发的打包
- eclipse 插件开发_初探心得(一)
- Eclipse插件开发基础(一)
- Eclipse插件开发快速入门(一)
- Eclipse插件开发入门(一)
- Eclipse插件开发(一)Hello World
- Eclipse插件开发学习笔记(二)
- Eclipse插件开发学习笔记【1】---Eclipse环境搭建
- Eclipse对插件的安装(link方式)
- Oracle数据库的迁移方法
- 在校学生关于自学编程的困惑
- 智取iPad,巧夺GPS,PC-cillin2011云安全软件 “赏金试驾”火速报名!
- pku 3621
- GPRS与WAP的区别
- Eclipse插件开发笔记一:对Eclipse的理解
- 变态的C用法……
- was7.0配置birt
- 大概的了解了下javacc
- Hadoop- The Definitive Guide 笔记
- 在SQL Server 2005 中是如何知道一条SQL 语句运行多长时间、CPU 运行率
- H2数据库在JAVA(JDBC)中的基本使用
- 闭包 ---- 《JavaScript高级程序设计》中的解释
- [转载]JS截取字符串