[Eclipse]GEF入门系列(十一、树的一个实现) - 编程入门网
TreeNodePart应返回 TreeBranch实例,而TreeRootPart要覆盖这个方法,返回TreeRoot实例;另外要注意在 refreshVisuals()方法里,要把模型的当前属性正确反映到图形中,例如TreeNode里有反映 节点当前是否展开的布尔变量expanded,则refreshVisuals()方法里一定要把这个属性的当 前值赋给图形才可以。以下是TreeNodePart的部分代码:
上面代码中用到了几个EditPolicy,这里说一下它们各自的用途。实际上,从Role中已经 可以看出来,TreeNodeEditPolicy是用来负责节点的删除,没有什么特别; TreeNodeLayoutEditPolicy则复杂一些,我把它实现为ConstrainedLayoutEditPolicy的一个 子类,并实现createAddCommand()和getCreateCommand()方法,分别返回改变节点的父节点 和创建新节点的命令,另外我让createChildEditPolicy()方法返回NonResizableEditPolicy 的实例,并覆盖其createSelectionHandles()方法如下,以便在用户选中一个节点时用一个 控制点表示选中状态,不用缺省边框的原因是,边框会将整个子树包住,不够美观,并且在 多选的时候界面比较混乱。
选中节点的效果如下图,我根据需要改变了树节点的显示(修改PageNode类): 图3 同时选中三个节点(Node2、Node3和Node8) [Eclipse]GEF入门系列(十一、树的一个实现)(3)时间:2011-04-19 cnblogs bjzhanghao最后一个ContainerHighlightEditPolicy的唯一作用是当用户拖动节点到另一个节点区域 中时,加亮显示后者,方便用户做出是否应该放开鼠标的选择。它是GraphicalEditPolicy的 子类,部分代码如下,如果你看过Logic例子的话,应该不难发现这个类就是我从那里拿过来 然后修改一下得到的。
好了,现在树编辑器应该已经能够工作了。为了让用户使用更方便,你可以实现展开/收 起子节点、横向/纵向排列子节点等等功能,在视图部分Draw2D的例子代码已经内置了这些功 能,你要做的就是给模型增加适当的属性。我这里的一个截图如下所示,其中Node1是收起状 态,Node6纵向排列子节点(以节省横向空间)。 图4 树编辑器的运行界面 这个编辑器我花一天时间就完成了,但如果不是利用Draw2D的例子,相信至少要四至六天 ,而且缺陷会比较多,功能上也不会这么完善。我感觉在GEF中遇到没有实现过的功能前最好 先找一找有没有可以利用的资源,比如GEF提供的几个例子就很好,当然首先要理解它们才谈 得上利用。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |