- 浏览: 979327 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个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程序运行
在开始之前,我们先讲一点预备的(我自己的理解,如果有错不能怪我)。
1. GEF中,一个连接线模型要成功创建,则这个模型必须有个源和目标。大家可以试一下连接一个源,再把目的随便在某个点一下,线是不会出来的(当然如果任务一个点都可以是目标的话,那就另论了)。
2. GEF中,一个连接线模型即使已经被附着到了源和目的上,也不一定会被显示出来。这就要提到AbstractGraphicalEditPart的两个方法:getModelSourceConnections()和getModelTargetConnections()。在前面讲getModelChildren()方法时提到过。这两个方法就是用来返回结点上的源连接线和目的连接线。所以其实我们真正要保证的是这两个方法返回的结果正确。
3. GEF中,一个模型对象要支持连接,它的EditPart必须实现一个接口:NodeEditPart。实现这个接口主要就是要实现它的四个方法用来确定连接线的锚点。一般来说简单的返回一个ChopboxAnchor对象就可以。当然也可以自己实现自定义的锚点算法。
首先、把结点对象定义好。
还是以我们的HelloWorldModel作为结点对象。按照上面所说进行动作。为了记录结点对象的源和目的线,首先我们加两上List和几个方法来存储和操作这些连接线。如下:
private List inputs = new ArrayList();
private List outputs = new ArrayList();
public List getInputs() {
return inputs;
}
public List getOutputs() {
return outputs;
}
public void addInput(AbstractConnectionModel model) {
if (!inputs.contains(model)) {
inputs.add(model);
}
}
public void addOut(AbstractConnectionModel model) {
if (!outputs.contains(model)) {
outputs.add(model);
}
}
public void removeInput(AbstractConnectionModel model) {
if (inputs.contains(model)) {
inputs.remove(model);
}
}
public void removeOut(AbstractConnectionModel model) {
if (outputs.contains(model)) {
outputs.remove(model);
}
}
这里因为要先用到,所以先假设所有的连接线的模型都继承自AbstractConnectionModel。
其次、修改结点的EditPart
让HelloWorldEditPart实现接口 :NodeEditPart。然后完成以下方法:
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connection) {
return new ChopboxAnchor(getFigure());
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
return new ChopboxAnchor(getFigure());
}
public ConnectionAnchor getTargetConnectionAnchor(
ConnectionEditPart connection) {
return new ChopboxAnchor(getFigure());
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
return new ChopboxAnchor(getFigure());
}
@Override
protected List getModelSourceConnections() {
return ((HelloWorldModel)getModel()).getOutputs();
}
@Override
protected List getModelTargetConnections() {
return ((HelloWorldModel)getModel()).getInputs();
}
这样,我们的结点模型就修改完了。
需要注意的是,在GEF里,连接线也被当作一个模型来对待,因此我们首先就是要创建:模型、视图和控制。 注意:在前面已经说过,这里的连接EditPart需要继承:AbstractConnectionEditPart。 按照刚才的说法,我们的连接线要继续自AbstractConnectionModel。之所以这样,是因为连接线的类型可能有多种,比如说带箭头的、不带箭头的;有路由点的、没有路由点的。但我们假设有一些是相通的:每个连接线只能有一个源、一个目的。所以我们的AbstractConnectionModel,可以实现如下: public abstract class AbstractConnectionModel { private HelloWorldModel src; private HelloWorldModel target; public HelloWorldModel getSrc() { return src; } public void setSrc(HelloWorldModel src) { this.src = src; } public HelloWorldModel getTarget() { return target; } public void setTarget(HelloWorldModel target) { this.target = target; } public void attachSource(){ if(!src.getOutputs().contains(this)){ src.addOut(this); } } public void attachTarget(){ if(!target.getInputs().contains(this)){ target.addInput(this); } } public void deattachSource(){ if(src.getOutputs().contains(this)){ src.removeOut(this); } } public void deattachTarget(){ if(target.getInputs().contains(this)){ target.removeInput(this); } } } 我们再写一个类:PlainConnectionModel继承这个类。什么都不用写。这就表示一个普通的连接线。
我们创建一个PlainConnectionEditPart类,按照上面说的,这个类要继承:AbstractConnectionEditPart。内容暂时可以为空。
视图可以先不管,因为连接线会有一个默认的视图。
在EditPartFactory里追加它们的关联: if(model instanceof PlainConnectionModel){ PlainConnectionEditPart editPart = new PlainConnectionEditPart(); editPart.setModel(model); return editPart; }
我们先试一下效果。 修改Editor的initializeGraphicalViewer()方法。追加一个连接对象,如下: @Override protected void initializeGraphicalViewer() { HelloWorldModel model1 = new HelloWorldModel(); model1.setConstraints(new Rectangle(10,0,100,20)); HelloWorldModel model2 = new HelloWorldModel(); model2.setConstraints(new Rectangle(100,50,100,20)); HelloWorldModel model3 = new HelloWorldModel(); model3.setConstraints(new Rectangle(50,100,100,20)); PlainConnectionModel connection = new PlainConnectionModel(); connection.setSrc(model1); connection.setTarget(model2); connection.attachSource(); connection.attachTarget(); DiagramRootContent content = new DiagramRootContent(); content.addChild(model1); content.addChild(model2); content.addChild(model3); getGraphicalViewer().setContents(content); }
运行效果如下: 图一 连接线已经被加上了。
一、添加连接线的MVC结构。
1.创建模型
2。创建EditPart
3。创建视图
4。关联MVC
评论
我建立了两个模型Amodel、Bmodel。这两个模型对应的视图我使用的两张GIF图像AFigure、Bfigure。其中Bmodel是Amodel的子节点。我现在想在Afigure上显示Bfigure,试了很久没有成功。能给点建议吗?
发表评论
-
GEF中用鼠标移动画布
2011-12-27 13:37 1325第一步 增加Palette项: moveTool = n ... -
Draw2d的ScrollPane的使用
2011-04-19 15:05 1587ScrollPane scrollpane = ne ... -
GEF的动态变化二
2011-04-13 10:47 1299之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、 ... -
(译)Eclipse Zest二
2011-01-07 15:41 19095. Zest和JFace的例子 5.1 创建工程 创建一 ... -
(译)Eclipse Zest一
2011-01-07 15:14 28401. Eclipse Zest 1.1 概述 Eclips ... -
增加GEF的动态性
2011-01-06 10:25 1754在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身 ... -
GEF中Palette项的属性页显示
2010-11-04 14:25 1949一般来说我们只需要在GraphicalViewer部分显示在P ... -
定制GEF的Palette
2009-11-23 16:35 2502用GEF框架实现一个Editor时,会有一个默认的palett ... -
GEF增加之连接助手二
2009-10-29 16:01 1004上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 ... -
GEF功能增强之创建助手
2009-09-28 09:09 1674用过GMF就知道,GMF默认生成的editor有一个悬浮的创建 ... -
GEF功能增强之连接助手
2009-09-10 14:45 1779GEF图形编辑器中,通常 ... -
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 1389一、改变Layer GEF中会根据editpart的类 ... -
GEF中一个模型的多层图的问题
2008-12-26 16:00 1613一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个 ... -
GEF中增加ContextMenu的支持
2008-12-19 22:32 2608GEF中,增加对EditPart的右键菜单的支持是很普遍的一 ... -
增加Palette的拖放支持
2008-12-19 14:08 1937默认情况下,GEF中要创建一个新的结点都是通点在Palette ... -
给GEF拖放功能
2008-07-17 10:26 1860我们知道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)