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());
}
GEF - 制作一个简单图形化编辑框架笔记1的更多相关文章
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个超小按钮
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块制作一个音效播放器
用 Sound 对象制作一个音效播放器. 应用程序总览 程序在执行后默认会把 WAV 音频文件加载到清单中,单击“播放”按钮可开始 播放,同时显示 “正在播放 xxx 音效”的信息 . 播放过程中,可 ...
- 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider
前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
- 马蜂窝视频编辑框架设计及在 iOS 端的业务实践
(马蜂窝技术公众号原创内容,ID: mfwtech) 熟悉马蜂窝的朋友一定知道,点击马蜂窝 App 首页的发布按钮,会发现发布的内容已经被简化成「图文」或者「视频」. 长期以来,游记.问答.攻略等图文 ...
- FullCalendar v5.3.2版本制作一个航班日历Demo
今天一个新需求是制作一个航班日历来订舱.然后我就各种找,最后找到FullCalendar,过程非常煎熬,网上例子大部分没用,大部分没有完整版.官网教程又不是很详细.搞了几天才彻底搞好这个航班日历,有需 ...
- 使用CocosSharp制作一个游戏 - CocosSharp中文教程
注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...
- 用Phaser来制作一个html5游戏——flappy bird (二)
在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...
随机推荐
- JAVA定义接口格式:
[public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...
- iOS大神牛人的博客集合
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...
- upgrade-php-5-1-to-php-5-3-using-yum-on-centos
wget -q -O - http://www.atomicorp.com/installers/atomic | shyum upgrade phpyum -y remove atomic-rele ...
- Problem 2136 取糖果---FUOJ (线段树+维护)
http://acm.fzu.edu.cn/problem.php?pid=2136 题目大意: 给你n个袋子每个袋子里都装有糖果,然后呢你可以每次抽取一个连续的一个区间的袋子,然后带走里面最多糖果数 ...
- BigDecimal 运算
BigDecimal类 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提供的API类BigDecimal,用来对 ...
- mysql远程连接:ERROR 1130 (HY000): Host '*.*.*.*' is not allowed to connect to this MySQL server解决办法
安装完MySQL后,远程连接数据库的时候,出现 ERROR 1130 (HY000): Host '192.168.0.1' is not allowed to connect to this MyS ...
- 在CentOS6.7操作系统上编译安装httpd2.4
功能描述: 在CentOS6.7操作系统上,编译安装apache服务,实现定制功能等 一.安装前提 1)安装编译httpd需要的软件包 [root@bqe6tewv41kx ~]# yum -y i ...
- 如何利用java得到当前的时间和前一天的时间
1.得到当前的时间 Calendar cal = Calendar.getInstance(); String time=formatter.format(cal.getTime()); ...
- spring:bean的定义
一个完整的Bean的配置文件: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans ...
- Hive安装与部署集成mysql
前提条件: 1.一台配置好hadoop环境的虚拟机.hadoop环境搭建教程:稍后补充 2.存在hadoop账户.不存在的可以新建hadoop账户安装配置hadoop. 安装教程: 一.Mysql安装 ...