GEF - 制作一个简单图形化编辑框架笔记1

在首先来看看GEF是什么,GEF的全称是Graphical Editing Framework,图形化框架,可以利用此框架做图形化编。他的基本原理是采用MVC开发模式。

以下是一些例子

GEF里面包含有,

  • EditorPart - 编辑的容器,所有的图形都可以规则都存放在这个容器当中
  • EditPart - 图形的C部分,控制图形的内容与展示的重要中介
  • Figure - 图形的V部分,关于图形的形状部分,都会放在这里
  • Model - 图形的M部分,记录图形的属性

EditorPart

这部分是容器,没有了这部分什么东西都画不出来,可以说是个画布,里面会包含了很多基本的元素,包括一个View,供可以摆放东西的地方等等

在制作前,我们依赖一个插件org.eclipse.gef,有了这个插件,我们就可以建立我们的自己的GEF了,在插件的Manifest.mf文件里面的添加扩展点

这里的扩展点中的class就是编辑器的实体类,必须继承EditorPart,我们这里继承了GraphicalEditor(这个类的父类就是一个EditorPart),这里有几个必须重写的方法


    //这里设的ID是用作有需要在外界对此编辑器进行一些操作时使用,这个ID必须与扩展里面的ID一致,是唯一标识

    public static final String ID = "cn.tuto.editor.MyGraphicalEditor";

    //必须设EditDomain

    public MyGraphicalEditor() {
      setEditDomain(new DefaultEditDomain(this));
    }

  //初次界面的内容   @Override
    protected void initializeGraphicalViewer() {
        GraphicalViewer view = getGraphicalViewer();
        view.setContents(createEntreprise());

    }
  //保存界面内容
    @Override
    public void doSave(IProgressMonitor monitor) {
        // TODO Auto-generated method stub

    }
      //配置界面属性
    @Override
    protected void configureGraphicalViewer() {
        // TODO Auto-generated method stub
        super.configureGraphicalViewer();

        GraphicalViewer viewer = getGraphicalViewer();
        viewer.setEditPartFactory(new AppEditPartFactory());
    }

Model

这里的Model没有什么需要继承的,主要是用来记录持久化的属性,根据不同需求有不同的变化,就像Bean一样

View

这里的View必须继承成Figure,是一个画图的类,这里主要的是记录图形的样式,关于图形的一切改变都需要在这里编写,包括在这个图形的一些文字,例如Model里面的Name属性被改变了,如果在这个View里面需要展示的话,必须在这里也要被重设

Control

这里的Control必须继承EditPart,它是一个接口,里面需要实现一些方法,数量有点多,这里就不一一列举,这个例子里面我们选择继承了AbstractGraphicalEditPart这个是一个EditPart的子类,这个抽象类已经实现了好些方法,简易了开发者需要编写的代码,这个抽象类只需要实现以下几个方法就行了

  //创建View
  @Override
    protected IFigure createFigure() {
        IFigure figure = new EntrepriseFigure();
        return figure;
    }

  //创建图形规则
    @Override
    protected void createEditPolicies() {
        // TODO Auto-generated method stub

    }

  //每次Model被变更的时候,刷新图形的方法,View跟Model的连接点
    @Override
    protected void refreshVisuals() {

        EntrepriseFigure figure = (EntrepriseFigure)getFigure();
        Entreprise model = (Entreprise)getModel();

        figure.setName(model.getName());
        figure.setAddress(model.getAddress());
        figure.setCapital(model.getCapital());
    }
时间: 2024-12-28 16:23:55

GEF - 制作一个简单图形化编辑框架笔记1的相关文章

Android学习笔记(十二)——实战:制作一个聊天界面

//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Patch图片是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而哪些区域不可以.一般用来作为聊天信息的背景.在此我们先准备一张png图片.然后在 Android sdk 目录下有一个 tools 文件夹,在这个文件夹中找到 draw9patch.bat文件. 双击打开之后, 在导航栏点击 File→

吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个超小按钮

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"

7.1 制作模板并简单编辑

在上一章中,首先介绍了一般网站的开发流程,其主要流程有需求分析.网站制作.测试网页和发布网站.随后简单讲解了淘宝网首页有哪些内容7最后着重研究了页面布局技术,其中框架布局和表格布局有存在的必要,不可抛弃,DIV层布局是未来的发展趋势. 从本章开始,我们将继续学习网站制作相关知识.所有的页面制作好之后,我们就要测试页面内容,来审视我们制作的页面是否美观,来检查页面中是否有死链接,来查看页面是否可以兼容不同的浏览器.测试完之后,为了使更多的人知道您的网站,就必须把我们制作.测试好的网站在网上进行发布

一个自定义MVP .net框架 AngleFrame

摘要:本篇是本人在完成.net平台下一个项目时,对于MVP框架引发的一些思考,以及开发了一个小型的配置型框架,名字叫作AngleFrame.这个项目属于前端桌面管理系统的一部分,最终要集成进去. 关键词:      .net,Framwork,MVP,框架,c# 前提:       当前有很多成熟的.net Plugin Framework,如MEF.SCSF.Sharpdevelop和OSGi.net等,它们在功能上各有特色. 需求:         1.开发的项目或者说模块属于一个大系统的一

马蜂窝视频编辑框架设计及在 iOS 端的业务实践

(马蜂窝技术公众号原创内容,ID: mfwtech) 熟悉马蜂窝的朋友一定知道,点击马蜂窝 App 首页的发布按钮,会发现发布的内容已经被简化成「图文」或者「视频」. 长期以来,游记.问答.攻略等图文形式的形态一直是马蜂窝发展的优势所在.将短视频提升至与图文并列的位置,是因为对于今天的移动互联网用户来说,内容更真实直观.信息密度更大.沉浸感更强的短视频已经成为刚需.为了使旅游用户拥有更好的内容交互体验,丰富和完整原有的内容生态体系,马蜂窝加码了对短视频领域的布局. 现在,每天都会有大量短视频在马

使用本地光盘制作一个yum源

有时候Linux系统不能联网,此时就不能使用联网的yum源了:这时候需要利用在Linux系统下使用光盘制作一个yum源.步骤如下: 1.挂载光盘 mount /dev/cdrom /mnt 2.删除/etc/yum.repos.d/目录下所有的repo文件 rm -rf /etc/yum.repos.d/* 3.在/etc/yum.repos.d/目录创建新文件dvd.repo vim /etc/yum.repos.d/dvd.repo  //加入以下内容 [dvd]              

使用CSS3 制作一个material-design 风格登录界面

使用CSS3 制作一个material-design 风格登录界面 心血来潮,想学学 material design 的设计风格,就尝试完成了一个登录页面制作. 这是整体效果. 感觉还不错吧,结尾会附上代码 在编写的过程中,没有使用任何图片或者字体图标,全部使用css3完成,还是遇到一些难点和bug,所以想笔记下来,以后方便查阅. 响应式设计 在这个页面中,使用下面3点来完成响应式设计 最大宽度 .设定了一个 max-width 的最大宽度,以便在大屏幕时兼容. margin : 20px au

iOS自定义控件教程:制作一个可重用的旋钮

当你的APP需要一些新功能时,自定义UI控件会十分有用,尤其是这些自定义控件可以在其他APP里面很好的重用.Colin Eberhart写过一篇很棒的介绍自定义UI控件的教程.这个教程涉及的是一个继承自UISlider类的自定义控件的生成:该控件的功能是给定一个(滑动)范围供(用户滑动)选择,并返回一个(与滑动位置相对应的)固定值. 本篇基于iOS 7的自定义UI教程在Colin Eberhart那篇的基础上更深入一步:受调音台旋钮的启发,这里介绍如何制作一个功能类似UISlider的圆形旋转控

制作一个有模态的弹出层

参考慕课网课程<分享:阿当大话西游之WEB组件> 定制不同的皮肤可通过对元素添加或减少class类来实现. 首先,模态是指如下图部分的灰色背景部分:(灰色部分不可点击) 然后,要记住,模态要加在当前页面的上面,以及当前操作框(通常是一个弹出层)的下面 所谓上面,下面是指: 如果模态(通常是一个div)的定位是fixed(固定定位)的,那么它将不占据文档空间, 所以,将其height和width设置为100%,另外,设置left:0;top:0.即为铺满整个屏幕. 然后,在html中,处于此di