精品推荐
使用图形编辑框架创建基于 Eclipse 的应用程序
日期:2008年6月12日 作者: 查看:[大字体
中字体 小字体 ]
另一个有趣的区别是连接支持的代码。与 getModelChildren() 类似, getModelSourceConnections() 和 getModelTargetConnections() 应当返回表示节点之间连接的模型对象。超类在必要时创建对应的 EditPart,并将它们添加到源和目标连接 EditPart 列表。请注意,连接是由每端的节点引用的,而其 EditPart 只需创建一次。GEF 确保只创建一次连接,该工作是通过首先检查查看器中是否已经存在连接来完成的。 建立连接 编写连接 EditPart 实现没有太大的区别。首先生成 AbstractConnectionEditPart 的子类。跟前面一样,可以实现 refreshVisuals() ,以将属性从模型映射到图形。连接可能还拥有约束,尽管这些约束与前面的约束略有不同。这里,连接路由器使用约束来使连接转向(bend)。此外,连接 EditPart 的图形必须是 Draw2D Connection ,它引入了另一个需求:连接锚(connection anchor)。 连接必须由 ConnectionAnchor “锚定”在两端。因此,必须在连接 EditPart 中或在节点实现中表明使用哪些锚。缺省情况下,GEF 假定节点 EditPart 将通过实现 NodeEditPart 接口而提供锚。这样假定的一个原因是,锚的选择取决于各端上的节点正在使用的图形。连接 EditPart 不应了解节点正在使用的图形的任何内容。另一个原因是,当用户创建连接时,连接 EditPart 是不存在的,因此节点必须能够自己显示反馈。作为清单 2 的延续,我们在清单 3 中添加了必要的锚支持。 清单 3. 将锚支持添加到“节点”EditPart public class MyNodeEditPart extends AbstractGraphicalEditPart implements 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()); } ... } 技巧 #2 别忘记真正实现 NodeEditPart 接口。否则您的方法将永远不会被调用。 以连接(connection)为参数的方法是对现有连接 EditPart 设置锚时使用的方法。其它两个方法以请求(request)作为参数。这些方法是用户创建新连接时的编辑过程中使用的。对于本示例,所有情形都将返回 chopbox 锚。chopbox 锚只查找线与节点图形的边框相交的点。 实现连接 EditPart 是比较简单的。请注意,甚至无需创建图形,因为缺省的 PolylineConnection 创建适合于大多数场合(请参阅清单 4)。 清单 4. 初始的连接 EditPart 实现 public class MyConnectionEditPart extends AbstractConnectionEditPart { protected void createEditPolicies() { ... } protected void refreshVisuals() { PolylineConnection figure = (PolylineConnection)getFigure(); MyConnection connx = (MyConnection)getModel(); figure.setForegroundColor(MagicHelper.getConnectionColor(connx)); figure.setRoutingConstraint(MagicHelper.getConnectionBendpoints(connx)); } } 技巧 #3 最重要的是了解何时使用以及何时不使用 ConnectionEditPart。当用户可以选择某些东西并可与之进行交互的时候,就使用连接 EditPart。它可能与模型中的某个对象直接相关,并且通常可由自己删除。 如果您只是拥有一个需要绘制直线的节点或容器,那么只须用图形的 paint 方法绘制直线,或者组合一个图形,该图形包含 Polyline 图形。 连接始终都必须拥有源和目标。如果您需要一个连接,该连接可以在没有源或没有目标的情况下存在,那么比较好的方法是只继承 AbstractGraphicalEditPart ,并使用连接图形。 侦听模型
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:利用套接字机制实现Flash与数据库连接
下一篇:注册ActiveX控件的几种方法
相关文章:
相关软件: