- 浏览: 979729 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
这一节我们主要讲结点和连接的删除,另外就是连接的重定向。
一、连接线的选中与重定向
因为和系列五还有点扯,所以先讲一下连接的重定向。
在上一节中,我们创建了一个用来新建连接的Policy:HelloWorldGraphicalNodeEditPolicy,它还有两个方法在上一节中一直没有提到:
@Override
protected Command getReconnectSourceCommand(ReconnectRequest request) {
// TODO Auto-generated method stub
return null;
}
@Override
protected Command getReconnectTargetCommand(ReconnectRequest request) {
// TODO Auto-generated method stub
return null;
}
看方法名就可以知道这两个方法就是用来返回重定向源和重定向目标的了。所以要完成重定向其实很简单,就是写两个command了。回想一下我们新建一个连接的过程:首先是有一个连接对象,然后给这个对象设置源和目标,最后把它附着到这个源和目标上的。这就完成了一个连接的创建。
以重定向源举例。如果要重定向源,那么首先应该是先离开原来的源,把目标源设置为新的源,最后附着到这个新的源的。代码大约就是:
connection.deattachSource();
connection.setSrc(newSrc);
connection.attachSource();
重定向目标结点过程也一样。这里就不复述了。最后完成上面的两个方法即可。列举代码如下:
ReconnectSourceCommand:
public class ReconnectSourceCommand extends Command {
private AbstractConnectionModel connection;
private HelloWorldModel src;
private HelloWorldModel old;
public ReconnectSourceCommand(AbstractConnectionModel connection,
HelloWorldModel newSource) {
super();
this.connection = connection;
this.src = newSource;
}
@Override
public void execute() {
old = connection.getSrc();
connection.deattachSource();
connection.setSrc(src);
connection.attachSource();
}
@Override
public void undo() {
src = connection.getSrc();
connection.deattachSource();
connection.setSrc(old);
connection.attachSource();
}
}
重连方法:
@Override
protected Command getReconnectSourceCommand(ReconnectRequest request) {
ReconnectSourceCommand command = new ReconnectSourceCommand(
(AbstractConnectionModel) request.getConnectionEditPart()
.getModel(), (HelloWorldModel) getHost().getModel());
return command;
}
@Override
protected Command getReconnectTargetCommand(ReconnectRequest request) {
ReconnectTargetCommand command = new ReconnectTargetCommand(
(AbstractConnectionModel) request.getConnectionEditPart()
.getModel(), (HelloWorldModel) getHost().getModel());
return command;
}
这样就完成了重连了。
这里有一个失误,我还没讲怎么选中一条连接线呢。到目前为止,连接线都是不能选中的。呵呵,所以现在重定向命令已经完成,但是重定向操作还是不能做。那这里就顺便讲一下怎么选中一个连接线。
有点明白的观众一般此时会心里大喊:那是不是还是装Policy啊?对的,GEF中要想做点事,您都得做这个。那Policy安在哪呢?这个也很简单,因为是要选择Connection,和其他人无关,所以这个Policy肯定是要安在Connection的模型上。
这里因为我觉得所有的连接线都需要能够被选中。所以我就把这个Policy安装在:AbstractConnectionModel对应的EditPart上。不过因为我们还没有给AbstractConnectionModel定义EditPart。所以我们顺便定义一个。然后让所以其他connection的EditPart继承它就行了。代码就不举了。最后安装Policy。要支持连接线的选中,我们需要安装一个EditPolicy.CONNECTION_ENDPOINTS_ROLE,这里我们不需要写继承类,如下:
installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy());
好了,连接线可以被选中了。因为我们已经完成了重定向功能,所以应该也可以被重定向了。试一下:
图一
二、结点的删除
结点要被删除,还写Policy和command。这点跑不掉。看看现在已有的Policy里,都没有要返回一个删除命令的。所以肯定还得再写一个新Policy,然后把它安装到某个EditPart上去。
不过这里我有一点困惑的是:ContainerEditPolicy可以返回一个创建命令,怎么没有一个删除命令吗?我总觉得他们是一对的。可能是因为理解的还不深吧(后来理解,还是跟文件系统一样,删除是选中文件删除,不在是文件夹下操作)。不管怎么样,我们还是不得不去找一个支持删除的Policy,然后把它安装在一个EditPart上。
我们可以找到这个删除Policy为:ComponentEditPolicy。还有一个疑问就是:这个Policy应该安装在将被删除的模型EditPart上。这也很令我困惑(还是参考Windows文件系统:增加的时候是由父管理,这很好理解;删除的时候就变了自己删除自己呢!反正记住就行了)。
好了,我们写了一个ComponentEditPolicy类:HelloWorldComponentEditPolicy。然后把它安装到HelloWorldEditPart上去:
installEditPolicy(EditPolicy.COMPONENT_ROLE, new HelloWorldComponentEditPolicy());
还是和之前一样,先完成命令,再回过头来完成Policy。
早先我们讲增加的时候就讲了:一个HelloWorld要想被显示,它就得被加到content上去。那么我就想了,那要不想显示呢?它是不是就从content上移除啊?先试一下。
依据上面的想法,我们就猜想Command里至少应该有两个对象:一个将要被删除的,另一个就是content对象了。
command代码如下:
public class DeleteHelloWorldCommand extends Command {
private DiagramRootContent content;
private HelloWorldModel model;
public DeleteHelloWorldCommand(DiagramRootContent content,
HelloWorldModel model) {
super();
this.content = content;
this.model = model;
}
@Override
public void execute() {
content.removeChild(model);
}
@Override
public void undo() {
content.addChild(model);
}
}
最后再完成Policy,如下:
@Override
protected Command getDeleteCommand(GroupRequest request) {
DeleteHelloWorldCommand command = new DeleteHelloWorldCommand(
(DiagramRootContent) getHost().getParent().getModel(),
(HelloWorldModel) getHost().getModel());
return command;
}
我们前面提到过:getHost()代表Policy所安装在的对象,所以这里就是HelloWorldEditPart。因此要得到helloworld模型和它的父模型,像上面这样写就行了。
试一下,成功了。呵呵。这里我们不用写监听事件,因为在前面写增加子节点时已经完成了。
图:删除前 图:删除后
发表评论
-
GEF中用鼠标移动画布
2011-12-27 13:37 1327第一步 增加Palette项: moveTool = n ... -
Draw2d的ScrollPane的使用
2011-04-19 15:05 1588ScrollPane scrollpane = ne ... -
GEF的动态变化二
2011-04-13 10:47 1299之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、 ... -
(译)Eclipse Zest二
2011-01-07 15:41 19155. Zest和JFace的例子 5.1 创建工程 创建一 ... -
(译)Eclipse Zest一
2011-01-07 15:14 28401. Eclipse Zest 1.1 概述 Eclips ... -
增加GEF的动态性
2011-01-06 10:25 1756在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身 ... -
GEF中Palette项的属性页显示
2010-11-04 14:25 1952一般来说我们只需要在GraphicalViewer部分显示在P ... -
定制GEF的Palette
2009-11-23 16:35 2502用GEF框架实现一个Editor时,会有一个默认的palett ... -
GEF增加之连接助手二
2009-10-29 16:01 1009上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 ... -
GEF功能增强之创建助手
2009-09-28 09:09 1675用过GMF就知道,GMF默认生成的editor有一个悬浮的创建 ... -
GEF功能增强之连接助手
2009-09-10 14:45 1780GEF图形编辑器中,通常 ... -
GEF中实现“拷贝为图片”
2009-09-06 09:13 1320在一个GEF的编辑器中,编辑器上是一个个的Figure,从外观 ... -
GEF中扩大、缩小时处理编辑行为
2008-12-30 10:54 1498我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在 ... -
改变GEF的一些默认行为
2008-12-29 14:12 1390一、改变Layer GEF中会根据editpart的类 ... -
GEF中一个模型的多层图的问题
2008-12-26 16:00 1614一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个 ... -
GEF中增加ContextMenu的支持
2008-12-19 22:32 2609GEF中,增加对EditPart的右键菜单的支持是很普遍的一 ... -
增加Palette的拖放支持
2008-12-19 14:08 1937默认情况下,GEF中要创建一个新的结点都是通点在Palette ... -
给GEF拖放功能
2008-07-17 10:26 1862我们知道SWT支持Native的拖放。GEF使用SWT的拖放来 ... -
修改GEF中Connection的端点
2008-07-14 16:09 1794GEF中,选中一条连接线,默认的端点是两个小黑框,如下: ... -
GEF中导视图的使用
2008-07-10 17:01 2148有时增加一个导视图能给用户很大的方便性,例如在outline视 ...
相关推荐
GEF理解之第一部分,学习gef必备文档资料啊,值得下载
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第二部分,学习gef必备文档资料啊,值得下载
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
GEF 入门系列 GEF
Eclipse插件开发:GEF入门系列宝典
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。
适合gef初学者学习,本人认为是一个很不错的学习材料
emf介绍系列和gef入门介绍打包,适合新人快速掌握。
GEF是公司内部资料,在此提供给大家学习参考。
Eclipse插件开发--gef开发指南与入门系列宝典打包下载。
RCP GEF 入门教程,从法语班翻译过来的,自认为是比较全面细致的GEF入门教程,比八进制的《GEF入门系列》要浅显易懂。
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload
资源就不用多介绍了,想下的都知道是什么东西。。。 这是非加密版,所以你可以随意加注释,作笔记
GEF eclipse 插件
GEF简易教程-学习GEF的入门教程,不错的gef入门教程
gef 绘图折线的实现方法。 gef API chm 格式
eclipse GEF-ALL-3.4.2(1)