快速业务通道

[Eclipse]GEF入门系列(十一、树的一个实现) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
TreeNodePart应返回 TreeBranch实例,而TreeRootPart要覆盖这个方法,返回TreeRoot实例;另外要注意在 refreshVisuals()方法里,要把模型的当前属性正确反映到图形中,例如TreeNode里有反映 节点当前是否展开的布尔变量expanded,则refreshVisuals()方法里一定要把这个属性的当 前值赋给图形才可以。以下是TreeNodePart的部分代码:

public IFigure getContentPane() {    return ((TreeBranch) getFigure()).getContentsPane(); } protected List getModelChildren() {    return ((TreeNode) getModel()).getNodes(); } protected IFigure createFigure() {    return new TreeBranch(); } protected void createEditPolicies() {    installEditPolicy(EditPolicy.COMPONENT_ROLE, new TreeNodeEditPolicy());    installEditPolicy(EditPolicy.LAYOUT_ROLE, new TreeNodeLayoutEditPolicy ());    installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ContainerHighlightEditPolicy()); }

上面代码中用到了几个EditPolicy,这里说一下它们各自的用途。实际上,从Role中已经 可以看出来,TreeNodeEditPolicy是用来负责节点的删除,没有什么特别; TreeNodeLayoutEditPolicy则复杂一些,我把它实现为ConstrainedLayoutEditPolicy的一个 子类,并实现createAddCommand()和getCreateCommand()方法,分别返回改变节点的父节点 和创建新节点的命令,另外我让createChildEditPolicy()方法返回NonResizableEditPolicy 的实例,并覆盖其createSelectionHandles()方法如下,以便在用户选中一个节点时用一个 控制点表示选中状态,不用缺省边框的原因是,边框会将整个子树包住,不够美观,并且在 多选的时候界面比较混乱。

protected List createSelectionHandles() {    List list=new ArrayList();    list.add(new ResizeHandle((GraphicalEditPart)getHost(), PositionConstants.NORTH));    return list; }

选中节点的效果如下图,我根据需要改变了树节点的显示(修改PageNode类):

[Eclipse]GEF入门系列(十一、树的一个实现) - 编程入门网

图3 同时选中三个节点(Node2、Node3和Node8)

[Eclipse]GEF入门系列(十一、树的一个实现)(3)

时间:2011-04-19 cnblogs bjzhanghao

最后一个ContainerHighlightEditPolicy的唯一作用是当用户拖动节点到另一个节点区域 中时,加亮显示后者,方便用户做出是否应该放开鼠标的选择。它是GraphicalEditPolicy的 子类,部分代码如下,如果你看过Logic例子的话,应该不难发现这个类就是我从那里拿过来 然后修改一下得到的。

protected void showHighlight() {    ((TreeBranch) getContainerFigure()).setSelected(true); } public void eraseTargetFeedback(Request request) {    ((TreeBranch) getContainerFigure()).setSelected(false); }

好了,现在树编辑器应该已经能够工作了。为了让用户使用更方便,你可以实现展开/收 起子节点、横向/纵向排列子节点等等功能,在视图部分Draw2D的例子代码已经内置了这些功 能,你要做的就是给模型增加适当的属性。我这里的一个截图如下所示,其中Node1是收起状 态,Node6纵向排列子节点(以节省横向空间)。

[Eclipse]GEF入门系列(十一、树的一个实现) - 编程入门网

图4 树编辑器的运行界面

这个编辑器我花一天时间就完成了,但如果不是利用Draw2D的例子,相信至少要四至六天 ,而且缺陷会比较多,功能上也不会这么完善。我感觉在GEF中遇到没有实现过的功能前最好 先找一找有没有可以利用的资源,比如GEF提供的几个例子就很好,当然首先要理解它们才谈 得上利用。

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