前些天换了新电脑,本人一直处于兴奋中,基本是"不务正业"的状态。快过年了,虽然没什么动力干活,但我玩游戏技术比较差,魔兽3打电脑一家还很费劲,干脆写写帖子就当是休息吧!

由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。其实一年多来我们做的项目都是和它有关的,只是之前我具体负责的事情和它没什么关系。那时也看过黄老大写的代码,EMF和GEF混在一起特别晕,没能坚持看下去。这次自己要动手做了,正好趁此机会把它搞明白,感觉GEF做出来的东西给人很专业的感觉,功能也很强大,应该挺有前途的。此外,GEF里用到了很多经典模式,最突出的如大量应用Command模式,方便的实现Undo/Redo功能等等,通过学习GEF,等于演练了这些模式,比只是看看书写几个类那种学习方式的效果好很多。

现在网上关于GEF的文章和教程还不是很多(比起一年前还是增加了几篇),基本上都是eclipse.org上的那些,其中少数几篇有中文版,中文的原创就属于凤毛麟角了,市场上似乎也没有这方面的成书。GEF SDK里自带的文档则比较抽象,不适合入门。我觉得最好的入门方法是结合具体的例子,一边看代码,一边对照文档,然后自己再动手做一做。当然这个例子要简单点才好,像GEF的那个logic的例子就太复杂了,即使是flow(运行界面见下图)我觉得也有点大;另外例子要比较规范的,否则学成错误的路子以后还要花时间改就不值得了。

用GEF编写的流程编辑器

GEF的结构决定了GEF应用程序的复杂性,即使最最简单的GEF程序也包含五六个包和十几个类,刚开始接触时有点晕是很正常的。我找到一个还不错的例子,当然它很简单了,如果你现在就想自己试试GEF,可以点这里下载一个zip包(若已无法下载请用这个链接),展开后是六个项目(pt1,pt2,…,pt6),每一个是在前面一个的基础上增加一些功能得到的,pt1是最简单的一个,这样你就可以看到那些典型的功能(例如DirectEdit、Palette等等)在GEF里应该怎样实现了。关于这个例子的更多信息请看作者blog上的说明:

“Back in March, I talked a little about my initial attempts writing an Eclipse Graphical Editor Framework (GEF) application. I wanted, then, to write a tutorial that essentially walked the reader through the various stages of the development of my first application. I even suggested some kind of versioned literate programming approach to writing the tutorial and the code at the same time.

I haven't had time since then to make any progress, but I did get the GEF application to the stage where I had put together a snapshot at each of six milestones. A few people have written to me over the last six months asking the status of my tutorial and I've sent them my six snapshots as a starting point.

It makes sense for me to just to offer them here.

You can download a ZIP file with the six snapshots at http://jtauber.com/2004/gef/gef.zip.

Hopefully they are still useful, even without a surrounding tutorial.”

需要注意一点,这个例子应该是在Eclipse 2.1里写的,所以如果你想在Eclipse 3里运行这个例子,要修改plugin.xml里的dependencies为:

<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.gef"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>
<import plugin="org.eclipse.ui.views"/> 

再修改一下DiagramCreationWizard这个类finish()方法里page.openEditor(newFile);这句改为page.openEditor(new FileEditorInput(newFile),"com.jtauber.river.editor");,还有一些warning不太影响,可以不用管。

或者如果你不是特别着急的话,留意我这个半新手写的GEF入门系列帖子,说不定能引起你更多的共鸣,也是一个办法吧。

GEF的学习周期是比较长的,学之前应该有这个心理准备。特别是如果你没有开发过Eclipse插件,那么最好先花时间熟悉一下Eclipse的插件体系结构,这方面的文章还是很多的,也不是很难,基本上会开发简单的Editor就可以了,因为GEF应用程序一般都是在Editor里进行图形编辑的。另外,绝大多数GEF应用程序都是基于Draw2D的,可以说GEF离不开Draw2D,而后者有些概念很难搞明白,加上其文档比GEF更少,所以我会从Draw2D开始说起,当然不能讲得很深入,因为我自己也是略知皮毛而已。

说实话,我对写这个系列不太有信心,因为自己也是刚入门而已。但要是等到几个月后再写,很多心得怕是讲不出来了。所以还是那句话,有什么写错的请指正,并且欢迎交流。

[Eclipse]GEF入门系列(序)相关推荐

  1. [Eclipse]GEF入门系列(六、添加菜单和工具条)

    我发现一旦稍稍体会到GEF的妙处,就会很自然的被它吸引住.不仅是因为用它做出的图形界面好看,更重要的是,UI中最复杂和细微的问题,在GEF的设计中无不被周到的考虑并以适当的模式解决,当你了解了这些,完 ...

  2. [Eclipse]GEF入门系列(九、增加易用性)

    当一个GEF应用程序实现了大部分必需的业务功能后,为了能让用户使用得更方便,我们应该在易用性方面做些考虑.从3.0版本开始, GEF增加了更多这方面的新特性,开发人员很容易利用它们来改善自己的应用程序 ...

  3. [Eclipse]GEF入门系列(二、GEF概述)

    本文转载自: https://www.cnblogs.com/bjzhanghao/archive/2005/02/13/104045.html 作者:bjzhanghao 转载请注明该声明. 在前面 ...

  4. [Eclipse]GEF入门系列(三、应用实例)

    本文转载自: https://www.cnblogs.com/bjzhanghao/archive/2005/02/19/106000.html 作者:bjzhanghao 转载请注明该声明. 构造一 ...

  5. [Eclipse]GEF入门系列(七、XYLayout和展开/折叠功能)

    前面的帖子里曾说过如何使用布局,当时主要集中在ToolbarLayout和FlowLayout(统称OrderedLayout),还有很多应用程序使用的是可以自由拖动子图形的布局,在GEF里称为XYL ...

  6. Dear小弟×××,给你们的一封信「社区运营入门系列 序」

    What are the most important relationships for me? my final answer is: my team. -- As a team leader, ...

  7. 【ASE入门学习】ASE入门系列——序章

    ASE:Amplify Shader Editor 一款材质工具 一.工具比较 Shader Forge不支持URP.HDRP,默认渲染管线复用性高 ASE支持URP.HDRP,复用性相对Shader ...

  8. [GEF循序渐进系列之二]GEF概述

    本文最初发表与http://eclipse.kuwww.net 原文连接:http://my.kuwww.net/eclipse/blogview.asp?logID=4 ---作者:齐好宗   hz ...

  9. LSTM长短记,长序依赖可追忆(深度学习入门系列之十四)

    摘要:如果你是一名单身狗,不要伤心,或许是因为你的记忆太好了.有时,遗忘是件好事,它让你对琐碎之事不再斤斤计较.然而每当自己记不住单词而"问候亲人"时,也确实气死个人.于是你懂得了 ...

最新文章

  1. python双引号报错_Python中select语句中的双引号”“怎么处理
  2. ASP.NETmvc常用JQUERY收藏【jquery.form.js结合jquery.validate.js】
  3. linux搭建SonarQube代码质量平台_Oracle 最新详细版本
  4. 计算机休眠怎么唤醒,电脑休眠后,就无法唤醒了?怎么办?快速教你解决这个问题...
  5. Java BigInteger类| bitCount()方法与示例
  6. 创建路径_PS钢笔工具是建立路径的基本工具
  7. hdu 2149+hdu 1846(巴什博弈)
  8. SQL Server 数据库数据文件、日志文件剩余可用空间不足处理方法。
  9. sap服务器安装双系统教程,安装双系统教程,新手入门必看教程
  10. SPSS得出因子后怎么计算综合得分
  11. 第三方支付api接口是什么?
  12. LBS(基于位置服务)常见定位技术综合分析
  13. Logo创作灵魂(下篇)
  14. R语言绘图 | Venn图
  15. 【博学谷学习记录】超强总结,用心分享 | JavaString类知识要点总结
  16. 基于python的json脚本解析
  17. Arduino与JavaScript开发实例-舵机驱动
  18. 跟它比,期货简直 Low 爆了!
  19. RGB和YUV视频存储格式
  20. android 全景拍照 sdk,Android全景SDK | 百度地图API SDK

热门文章

  1. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!...
  2. 关于空间坐标转化的若干论文
  3. Java Project和Web Project
  4. 2014年2月份第3周51Aspx源码发布详情
  5. ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)
  6. 通过Windows API 创建窗口的过程理解windows消息机制
  7. C#操作注册表增删改查及关机能保存问题
  8. Winsock网络编程快速入门
  9. 斯坦福大学深度学习视频(CS231n课程)
  10. 计算机网络IEEE 802,已连接到 IEEE 802.1 x 身份验证的计算机网络通过另一 802.1 x 启用的设备未连接到正确的网络...