一. 创建一个插件项目
通过从RCP application with a view 模板创建一个含ViewPart的Eclipse RCP项目。
二. 在MANIFEST.MF 添加对org.eclipse.gef插件的依赖。
三. 创建model
为了方便使用,我们了创建BaseModel和BaseContainerModel这两种基类。
BaseModel
:所有模型的最基础类。一定要能够明白里面的PropertyChangeSupport和firePropertyChange的意义。
BaseContainerModel
:父模型。
DiagramModel
:最底层的模型,就跟jface.TreeViewer中,最底层的模型总是不显示的,从界面上无法直接看到,但却又真实存在。
RectModel
:最简单的一个图形相关的模型,用来表示一个矩形。
注意:
我偷了一个懒,一般属性我fire的propertyName都是IPropertyConst.COMMON,只有添加、删除children的时候,对外fire的是IPropertyConst.CHILDREN。
四. 创建model对应的EditPart
同样的,我也创建了BaseEditPart和BaseContainerEditPart两个基础类型。
BaseEditPart
:所有EditPart的基础类。extends于AbstractGraphicalEditPart,同时实现了PropertyChangeListener接口。
注意:
propertyChange中对于IPropertyConst.
CHILDREN
和IPropertyConst.COMMON
的不同属性改变的不同处理。
BaseContainerEditPart
:所有父模型的基础类。作用和BaseContainerModel类似,都是为了处理父子结构。
注意:覆盖了getModelChildren()方法。
DiagramEditPart
:DiagramModel对应的EditPart。
RectEditPart
:RectModel对应的EditPart。
DiagramEditPartFactory
:通过model得知应该创建哪种对应的EditPart。就和jface.TableView一样,知道通过model得到TableItem。和jface.TreeViewer一样,通过model知道生成TreeItem一样的功效。只是在GEF中model和EditPart过多,需要一个工厂类专门处理,而TableViewer和TreeViewer则不需要。
五. 创建EditPart对应的Figure
IBaseFigure
:为了后面能方便获得模型而做的接口。
DiagramFigure
:与DiagramEditPart对应。
RectFigure
:与RectEditPart对应。
六. 在ViewPart中创建GraphicalViewer
graphicalViewer = new ScrollingGraphicalViewer();
graphicalViewer.createControl(bottomComposite);
graphicalViewer.setRootEditPart(new ScalableRootEditPart());
graphicalViewer.setEditPartFactory(new DiagramEditPartFactory());
graphicalViewer.setContents(this.buildModel());
代码很简洁,没有做任何多余的事情,先create一个GraphicalViewer,在赋予一个Root的EditPart,再指定EditPartFactory,最后,将构建的模型放入GraphicalViewer中。
七. 启动,查看运行效果
注意:
- 第一个灰边框:ViewPart的。
-
第二个黑边框:DiagramModel对应的DiagramFigure的。
-
第三个小框:RestModel对应的RestFigure的。
八. 总结
1.
写的非常简洁,没有Command,没有EditPolicy,没有多余的属性和方法,就基本将一个GEF的项目搭建出来了,完全可以作为通用的GEF框架。当然,前提是纯粹的GEF,而不是EMF,GMF等。
2.
GEF中有些概念一定要搞清楚:
- PropertyChangeSupport和PropertyChangeListener
- Model与EditPart与Figure的一对一
- Model、EditPart与EditPartFactory
- EditPart与Figure
- Root的model(本文中的DiagramModel)
- RootEditPart
3.
本文基于Eclipse3.4
4.
后续文章会跟进的,尽量做成一个入门的系列。但是还是需要你能够预先知晓一些GEF的基本概念。并要明白model的变化是如果传递,并最终显示到UI界面的Figure上的。
分享到:
相关推荐
GEF 全称 Graphical Editor Framework 。它是一个基于 eclipse 的图形化编辑框架。通过它,开发人员可以方便的以图形化的方式(而非文本的方式)展示和编辑模型。
这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。
SVG(Scalable Vector Graphics)是一种...本文的目的就是利用Eclipse平台的GEF(Graphic Editor Framework)框架,针对SVG的能聚合多种媒体数据,并能体现其动态性和交互性的特点,设计并实现了一款SVG的可视化制作工具。
eclipse插件开发框架GEF API文档 eclipse插件开发框架GEF API文档
该资料对GEF这个框架的一些理解,以及自己的一些学习体会,其中大部分是从网上搜到的一些关于GEF框架的质料,这里已经经过了整理,对于一个初学者很有帮助。
关于gef的一点研究总结
Gef 学习总结,Gef 相对资料比较少没有完整的文档都要靠自己学习
使用gef技术做的简单流程设计起
一些应用Eclipse的gef框架的演示程序,欢迎大家交流。
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...
第四章 GEF框架.doc 第四章 GEF框架.doc 第四章 GEF框架.doc
通过简单易懂的方式,介绍了Eclipse GEF 框架原理。对GEF开发有极大的好处/
GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。
与 其他一些MVC编辑框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架 的局限(不过实际上还是很少有脱离Draw2D的实现)。
point="org.eclipse.ui.editors"> class="com.example.ui.PracticeEditor" icon="logo.gif" default="true" contributorClass=... name="Practice Editor" ... extensions="gefpracticeal"/> </extension>
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
一个GEF的简单例子,简单的做了一下,包括源码。