`

GEF学习笔记

阅读更多
GEF以前学习过, 而且还按照Dudu的教程做了一遍, 在网上也找了不少资料, 不错的文章也转载了不少,只不过当时对插件开发还只是一知半解, 对图形开发更是没有什么概念,导致的直接后果就是:现在基本上全部忘记光了,于是不得不从头开始,不过这次不仅要知其然, 而且还要知其所以然, 不过理解起来还是比较快的, 不知是拖以前学习的底子的福, 还是因为这么长时间做Eclipse开发来的基础


在理想的情况下,命令应当只知道模型。因此应当尽量避免对EditPart和图形的引用。

图形(Figure)不应该去访问EditPart和Model, 即使Figure要引用EditPart, EditPart也只是作为一个Listner来被应用,而不是直接去引用一个EditPart

一个Model实例会对应一个EditPart, 因为EditPart会随着Model的存在而存在, 而model随时可能被删除, 所以在EditPart中应尽量少包含一些长效信息,而且应该避免Command去引用EditPart

EditPart的refreshVisuals()方法只会在其初始化的时候被自动调用,如果model发生变化,需要更新图形界面时,必须手动调用refreshVisuals()方法.

连接(connection)是通过source和target连接点来获取的, 而且connection的EditPart只会创建一次, connection也是一种图形,它必须通过ConnectionAnchor挂在另外两个图形上面,因此必须告诉connection它所需要的两个anchor在哪里, 默认情况GEF会通过给连接图形的EditPart实现NodeEditPart接口来提供所需要的anchor, 这样做一个是因为anchor是与连接图形关联的,而连接在开始的时候是不知道anchor在哪里的, 另一个原因是, 当用户创建一个connnection的时候, Connection EditPart还没有被创建

EditPart通过监听器来获得模型的修改,并提供方法去刷新视图, 比如子节点被删除,将调用refreshChildren()方法去删除子节点对应的图形和EditPart, 如果只是属性发生变化,那么将调用refreshVisuals()方法, 因为该方法会频繁调用,因此在调用前应该做一些判断来避免不必要的刷新

一般在active()方法中添加listener, deactive()中删掉这些添加的listener,

在EditPart中, 由图形修改导致模型修改是通过command来实现, 而模型修改导致图形修改则是通过listener来实现

EditPart是GEF的核心, 对于一个可编辑的模型元素都必须有一个对应的EditPart类对应, 在EditPart中有两个容易混淆的方法:getModelChildren()返回包含在当前模型中的子模型, getChildren()返回子模型对应的EditPart

如果父图形不是子图形的直接父亲, 那么需要实现AbstractGraphicalEditPart.getContentPane()方法, 得到的对象将用来存放所有的子图形

当用户在图形编辑器中执行操作的时候, GEF在内部会创建相应的Request, 比如新建一个对象将生成CreateRequest, 它包含了新建对象的模型实例, 用来存放该Request的EditPart

对于我们的EditPolicy实现来说, 我们要做的大部分工作就是根据request创建一个Comamnd对象, Command子类一般要实现execute和undo方法,execute方法就是用来将图形的改变更新到模型上, Command更多的是对模型的依赖, 而跟GEF其他的组件没有什么关系, 比如绝对不会去引用EditPart和EditPolicy实例
分享到:
评论
6 楼 xmind 2010-11-20  
EditPolicy
5 楼 ywjun 2008-07-16  
  
4 楼 macrochen 2008-01-13  
引用
请教老师们一个问题:编辑器中内容超过了屏幕尺寸、有了滚动条,请问如何能够获取滚动的方向和值。

不好意思, GEF用的少, 不知道怎么解决
3 楼 nnnn 2008-01-09  
请教老师们一个问题:编辑器中内容超过了屏幕尺寸、有了滚动条,请问如何能够获取滚动的方向和值。
2 楼 macrochen 2008-01-03  
差不多是这样
1 楼 nuoda 2008-01-03  
GEF是个好东西,综合你的相关blog和“八进制”的相关blog,还是可以透彻理解的。按照我的理解,模型可以看做数据库、命令可以看做是数据库操作程序、编辑器可以看做是浏览器、画布可以看做是表单、每一个figure可以看做是表单的字段,控制这些相互关联的editpart相当于struct的action。毕竟也是MVC架构吗,不知道是不是正确?

相关推荐

    Eclipse插件开发学习笔记 第三四篇(26-28)+原代码.rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    《Eclipse插件开发学习笔记》源码

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发学习笔记 第三四篇(22-25).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    Eclipse+插件开发学习笔记

    第一篇介绍Eclipse平台...第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例

    Eclipse插件开发学习笔记(第一章)

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发 学习笔记 第二篇 核心技术(17-21).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    Eclipse插件开发+学习笔记(完整 清晰) part1

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    eclipse插件开发学习笔记_源码

    eclipse插件开发学习笔记每章源代码,对学习插件开发很有帮助

    Eclipse+插件开发 学习笔记(完整 清晰).part4.rar

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发 学习笔记(第二章上)

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发 学习笔记(第三四章上)

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse+插件开发学习笔记.part2

    第一篇介绍Eclipse平台...第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例

    Eclipse插件开发 学习笔记(第三四章下包含源码)

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    eclipse插件开发学习笔记_教程2

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse 插件开发 学习笔记(完整 清晰).part2.rar

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发学习笔记(第一篇 开发基础 1-8章)

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse+插件开发 学习笔记(完整 清晰).part3.rar

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

Global site tag (gtag.js) - Google Analytics