背景知识:
AWT:
JAVA最早的GUI技术,采用了“交集”的办法,即只支持每个图形系统都有的、最常用的控件和显示风格。
Swing:与AWT完全不同的策略,除了自己的一套标准的控件外,支持用户手绘界面,但完全脱离操作系统控件的支持,使得性能受到影响。
SWT:
同时吸取了AWT和Swing的优点,目标平台上有的控件,SWT直接使用,没有的,采用Swing方式绘制。基本体系分为三层:1、SWT的API,2、JNI相关的代码,3、C语言实现的操作系统本地动态链接库文件。
JFace:基于SWT的工具箱,提供一些常见功能的实现框架,如对话框、首选项设置、向导、操作、查看器等。
RCP:
构建一个基于Eclipse平台技术的应用程序所需要的最小集合,包括:Equniox、SWT/JFace、UI、Runtime,产品示例:IBM Lotus Notes Hannover,RCP再加上一些辅助功能就构成了Eclipse平台,如:Team、Debug、IDE UI、Ant、Update、Help、Search等。
EMF:
Eclipse Modeling Framework,原理:根据java接口、UML图生成数据模型的元模型 Ecore,再根据元模型生成实现代码。
Draw2D:
Draw2D是基于SWT的图形处理包,它适合用作GEF的View层,由以下几个部分组成:轻量系统类 LightweightSystem,画布Canvas,图形元素Figure,事件分配器EventDispatcher,更新管理器UpdateManager
GEF:
Graphical Editing Framework,用于开发图形界面相关的应用程序,如流程图、GUI设计工具、所见即所得的排版工具等,其生成的图形编辑器依赖于RCP技术。
引言
大部分GEF应用程序都实现为Eclipse的Editor,也就是说整个编辑区域是放置在一个Editor里的。所以典型的GEF应用程序具有一个图形编辑区域包含在一个Editor(例如GraphicalEditorWithPalette)里,可能有一个大纲视图和一个属性页,一个用于创建 EditPart实例的EditPartFactory,一些表示业务的模型对象,与模型对象对应的一些EditPart,每个EditPart对应一个 IFigure的子类对象显示给用户,一些EditPolicy对象,以及一些Command对象。
GEF应用程序的工作方式如下: EditPartViewer接受用户的操作,例如节点的选择、新增或删除等等,每个节点都对应一个EditPart对象,这个对象有一组按操作Role 分开的EditPolicy,每个EditPolicy会对应一些Command对象,Command最终对模型进行直接修改。用户的操作转换为 Request分配给适当的EditPolicy,由后者创建适当的Command来修改模型,这些Command会保留在EditDomain(专门用于维护EditPartViewer、Command等信息的对象,一般每个Editor对应唯一一个该对象)的命令堆栈里,用于实现撤消/重做功能。
实现
。。。。。。
一个简单的 GEF 示例: 点击下载