新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → [转帖]GEF实践总结(一)简洁的基础框架 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5879 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]GEF实践总结(一)简洁的基础框架 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hongjunli 帅哥哟,离线,有人找我吗?魔羯座1978-1-20
      
      
      威望:5
      头衔:为振兴论坛而努力!
      等级:研二(中了一篇WWWC Poster)(版主)
      文章:808
      积分:7964
      门派:IEEE.ORG.CN
      注册:2006/3/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hongjunli发送一个短消息 把hongjunli加入好友 查看hongjunli的个人资料 搜索hongjunli在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hongjunli的博客楼主
    发贴心情 [转帖]GEF实践总结(一)简洁的基础框架


    关键字: gef实践 基础框架
    一. 创建一个插件项目
    通过从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

    Java代码
    graphicalViewer = new ScrollingGraphicalViewer();   
    graphicalViewer.createControl(bottomComposite);   
      
    graphicalViewer.setRootEditPart(new ScalableRootEditPart());   
    graphicalViewer.setEditPartFactory(new DiagramEditPartFactory());   
      
    graphicalViewer.setContents(this.buildModel());  

    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上的。

    源代码如下附件所示:


    原文地址:http://lggege.javaeye.com/blog/462889


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/9/8 12:14:00
     
     Humphrey 帅哥哟,离线,有人找我吗?狮子座1981-7-23
      
      
      威望:1
      等级:研二(搞定了DL,再搞定F-Logic!)
      文章:937
      积分:5743
      门派:W3CHINA.ORG
      注册:2008/3/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Humphrey发送一个短消息 把Humphrey加入好友 查看Humphrey的个人资料 搜索Humphrey在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Humphrey的博客2
    发贴心情 
    刚看到GEF的时候还觉得十分陌生,但是看了图就有了似曾相识的感觉了。

    ----------------------------------------------
    鸿丰

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/9/23 16:39:00
     
     GoogleAdSense狮子座1981-7-23
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/1 16:56:53

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms