快速业务通道

[Eclipse]GEF入门系列(九、增加易用性) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
辅助线才是可见的。我们新增了Ruler和 Guide两个类,前者表示标尺,后者表示辅助线。因为辅助线是建立在标尺上的,所以Ruler 到Guide有一个包含关系(黑色菱形);画布上有两个标尺,分别用topRuler和leftRuler这 两个变量引用,也是包含关系,也就是说,画布上只能同时具有这两个标尺;Node到Guide有 两个引用,表示Node吸附到的两条辅助线(为了简单起见,在本文附的例子中并没有实际使 用到它们,Guide类中定义的几个方法也没有用到)。Guide类里的map变量用来记录吸附在自 己上的节点和对应的吸附边。要让画布上能够显示标尺,首先要将原先的GraphicalViewer改 放在一个 RulerComposite实例上(而不是直接放在编辑器上),后者是GEF提供的专门用于 显示标尺的组件,具体的改变方法如下:

//定义一个RulerComposite类型的变量 private RulerComposite rulerComp; //创建RulerComposite,并把GraphicalViewer创建在其上< span style="color: #008000;"> protected void createGraphicalViewer(Composite parent) { rulerComp = new RulerComposite(parent, SWT.NONE); super.createGraphicalViewer(rulerComp); rulerComp.setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer ()); } //覆盖getGraphicalControl返回RulerComposite实例< span style="color: #008000;"> protected Control getGraphicalControl() { return rulerComp; }

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

时间:2011-04-19 cnblogs bjzhanghao

然后,要设置GraphicalViewer的几个有关属性,如下所示,其中前两个分别表示左侧和 上方的标尺,而最后一个表示标尺的可见性:

getGraphicalViewer().setProperty (RulerProvider.PROPERTY_VERTICAL_RULER,new SubjectRulerProvider (diagram.getLeftRuler())); getGraphicalViewer().setProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER,new SubjectRulerProvider(diagram.getTopRuler())); getGraphicalViewer().setProperty(RulerProvider.PROPERTY_RULER_VISIBILITY,new Boolean(diagram.isRulerVisibility()));

在前两个方法里用到了SubjectRulerProvider这个类,它是我们从RulerProvider类继承 过来的, RulerProvider是一个比较特殊的类,其作用有点像EditPolicy,不过除了一些 getXXXCommand()方法以外,还有其他几个方法要实现。需要返回Command的方法包括: getCreateGuideCommand()、getDeleteGuideCommand()和 getMoveGuideCommand(),分别返 回创建辅助线、删除辅助线和移动辅助线的命令,下面列出创建辅助线的命令,其他两个的 实现方式是类似的,你可以在本文所附例子中找到它们的代码:

public class CreateGuideCommand extends Command { private Guide guide; private Ruler ruler; private int position; public CreateGuideCommand(Ruler parent, int position) { setLabel("Create Guide"); this.ruler = parent; this.position = position; } public void execute() { guide = ModelFactory.eINSTANCE.createGuide();//创建一条新的辅助线 guide.setHorizontal(!ruler.isHorizontal()); guide.setPosition(position); ruler.getGuides().add(guide); } public void undo() { ruler.getGuides().remove(guide); } }

接下来再看看RulerProvider的其他方法,SubjectRulerProvider维护一个Ruler对象,在 构造方法里要把它的值传入。此外,在构造方法里还应该给Ruler和Guide模型对象增加监听 器用来响应标尺和辅助线的变化,下面是Ruler监听器的主要代码(因为使用了EMF作为模型 ,所以监听器实现为Adapter。如

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号