Eclipse GEF_02_创建模型

概述

下面我们就要在这个 Diagram Editor 上画图了,因为我们要讲的是 GEF,所以要按 GEF 的路子走,即使看上去比较麻烦。什么是 GEF 的路子呢,可以看下面的图看了解一下。
​​​​​​在这里插入图片描述

创建模型
首先我们创建最基本的模型,因为我们现在只想在 Diagram Editor 中显示 Hello World 就好,所以我们只有一个模型,我们把这个模型放在 gef.tutorial.step.model 包中。
在这里插入图片描述
其实我们在这个模型文件中给出一个字符串变量 text 后,单击右键,在菜单中就可以设置 Getters 和Setters。 Anyway,这个模型够简单的了吧。

创建控制器(Controller)
下面该创建显示上面模型的视图 View 了吧,先别忙,我们要先创建连接视图和模型的控制器,在 GEF中就是 EditPart 了。因为在创建视图的时候要执行这个控制器。靠,说是什么 MVC,我觉得够乱的。
那我们就创建一个 HelloEditorPart 吧,(其实最好写成 HelloEditPart),放在 gef.tutorial.step.parts 包中。我们可以看到这里的 HelloEditorPart 的主要作用就是用 Draw2D 的函数作图,这里的图形就是在一个 Label上写 Hello World 这几个字母。
大家注意 import 的时候要 import 进正确的类。譬如这里就应该 import org.eclipse.draw2d.Label。因为我们后面用的是 Graphical Viewer,我们这里的 HelloEditorPart 就从 AbstractGraphicalEditPart 派生。在这里插入图片描述
这里我们使用 getModel()函数获得 HelloModel 模型。因为在 GEF 中模型被当作 Object 类型对待,所以我们这里进行了强制转换。这个要注意,以后我们生成 Setters 时也要用 Object 类型,然后再强制转换,后面会看到的。
这样,我们创建的 HelloModel 就可以被 EditPart 操作了,并且 EditPart 还绘制了图形。

连接模型和控制器(Controller)
现在我们已经有了模型 HelloModel,有了它的控制器 HelloEditorPart,怎么把它们联系起来呢。 GEF的方法是用工厂 Factory。为什么用工厂模式呢,现在我们只有一个模型和它的控制器,如果多了就比较麻烦了。工厂模式大家参考模式书。
简单地说,连接模型和控制器只需两步:
(1)首先根据模型类型创建其控制器
(2)然后用 setModel()函数连接模型和其控制器。在这里插入图片描述

创建视图 View
下面就要在 DiagramEditor 中创建 Viewer 了,用来显示 HelloEditorPart 中绘制的图形的。我们这里创建的是一个 GraphicalViewer。在GraphicalViewer 通过其 initializeGraphicalViewer()函数接收到 HelloModel
的内容前,我们要先配置一下 GraphicalViewer。而configureGraphicalViewer()函数中是配置 GraphicalViewer的好地方。配置 GraphicalViewer 包括为 DiagramEditor 选择合适的 RootEditPart(决定了 editor 的工作区,例如 GEF 包括可缩放 zoomable 和可卷动 scrollable 的工作区,以后会谈到)和 EditPartFactory(我们例子中就是 PartFactory)。我们可以看到配置 GraphicalViewer 就是把模型和控制器在视图GraphicalViewer 中连接起来。
配置好GraphicalViewer后 ,我们就可以设置GraphicalViewer中显示的内容了 , 就是在initializeGraphicalViewer()中用 setContents()函数。(我窃以为这是多此一举,不符合 MVC 的规则,因为前
面已经在视图中把模型和控制器连接起来了。)在这里插入图片描述
运行看看我们的成功吧。我靠, GEF 竟然把 MVC 糟蹋到这种程度,看来需要改进的地方不少呀。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值