快速业务通道

[Eclipse]GEF入门系列(七、XYLayout和展开/折叠功能) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

[Eclipse]GEF入门系列(七、XYLayout和展开/折叠功能)

时间:2011-04-19 cnblogs bjzhanghao

前面的帖子里曾说过如何使用布局,当时主要集中在ToolbarLayout和FlowLayout(统称 OrderedLayout),还有很多应用程序使用的是可以自由拖动子图形的布局,在GEF里称为 XYLayout,而且这样的应用多半会需要在图形之间建立一些连接线,比如下图所示的情景。 连接的出现在一定程度上增加了模型的复杂度,连接线的刷新也是GEF关注的一个问题,这里 就主要讨论这类应用的实现,并将特别讨论一下展开/折叠(expand/collapse)功能的实现 。

[Eclipse]GEF入门系列(七、XYLayout和展开/折叠功能) - 编程入门网

图1 使用XYLayout的应用程序

还是从模型开始说起,使用XYLayout时,每个子图形对应的模型要维护自身的坐标和尺寸 信息,这就在模型里引入了一些与实际业务无关的成员变量。为了解决这个问题,一般我们 是让所有需要具有这些界面信息的模型元素继承自一个抽象类(如Node),而这个类里提供 如point、dimension等变量和getter/setter方法:

public class Node extends Element implements IPropertySource {    protected Point location = new Point(0, 0);//位置    protected Dimension size = new Dimension(100, 150);//尺寸    protected String name = "Node";//标签    protected List outputs = new ArrayList(5);//节点作为起点的连接    protected List inputs = new ArrayList(5);//节点作为终点的连接 … }

[Eclipse]GEF入门系列(七、XYLayout和展开/折叠功能)(2)

时间:2011-04-19 cnblogs bjzhanghao

EditPart方面也是一样的,如果你的应用程序里有多个需要自由拖动和改变大小的 EditPart,那么最好提供一个抽象的EditPart(如NodePart),在这个类里实现 propertyChange()、createEditPolicy()、active()、deactive()和refreshVisuals()等常 用方法的缺省实现,如果子类需要扩展某个方法,只要先调用super()再写自己的扩展代码即 可,典型的NodePart代码如下所示,注意它是NodeEditPart的子类,后者是GEF专为具有连接 功能的节点提供的EditPart:

public abstract class NodePart extends AbstractGraphicalEditPart implements PropertyChangeListener, NodeEditPart {    public void propertyChange(PropertyChangeEvent evt) {      if (evt.getPropertyName().equals(Node.PROP_LOCATION))        refreshVisuals();      else if (evt.getPropertyName().equals(Node.PROP_SIZE))        refreshVisuals();      else if (evt.getPropertyName().equals(Node.PROP_INPUTS))        refreshTargetConnections();      else if (evt.getPropertyName().equals(Node.PROP_OUTPUTS))        refreshSourceConnections();    }    protected void createEditPolicies() {      installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());      installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new NodeGraphicalNodeEditPolicy());    }    public void activate() {…}    public void deactivate() {…}    protected void refreshVisuals() {      Node node = (Node) getModel();      Point loc = node.getLocation();      Dimension size = new Dimension(node.getSize());      Rectangle rectangle = new Rectangle(loc, size);      ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rectangle);    }    //以下是NodeEditPart中抽象方法的实现    public C

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号