快速业务通道

[Eclipse]GEF入门系列(四、其他功能) - 编程入门网

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

[Eclipse]GEF入门系列(四、其他功能)

时间:2011-04-19 cnblogs bjzhanghao

最近由于实验室任务繁重,一直没有继续研究GEF,本来已经掌握的一些东西好象又丢掉 了不少,真是无奈啊,看来还是要经常碰碰。刚刚接触GEF的朋友大都会有这样的印象:GEF 里概念太多,比较绕,一些能直接实现的功能非要拐几个弯到另一个类里做,而且很多类的 名字十分相似,加上不知道他们的作用,感觉就好象一团乱麻。我觉得这种情况是由图形用 户界面(GUI)的复杂性所决定的,GUI看似简单,实际上包含了相当多的逻辑,特别是GEF处 理的这种图形编辑方式,可以说是最复杂的一种。GEF里每一个类,应该说都有它存在的理由 ,我们要尽可能了解作者的意图,这就需要多看文档和好的例子。

在Eclipse里查看文档和代码相当便利,比如我们对某个类的用法不清楚,一般首先找它 的注释(选中类或方法按F2),其次可以查看它在其他地方用法(选中类或方法按 Ctrl+Shift+G),还可以找它的源代码(Ctrl+鼠标左键或F3)来看,另外Ctrl+Shift+T可以 按名称查找一个类等等。学GEF是少不了看代码的,当然还需要时间和耐心。

好,闲话少说,下面进入正题。这篇帖子将继续上一篇内容,主要讨论如何实现 DirectEdit、属性页和大纲视图,这些都是一个完整GEF应用程序需要提供的基本功能。

实现DirectEdit

所谓DirectEdit(也称In-Place-Edit),就是允许用户在原本显示内容的地方直接对内 容进行修改,例如在Windows资源管理器里选中一个文件,然后按F2键就可以开始修改文件名 。实现DirectEdit的原理很直接:当用户发出修改请求(REQ_DIRECT_EDIT)时,就在文字内 容所在位置覆盖一个文本框(也可以是下拉框,这里我们只讨论文本的情况)作为编辑器, 编辑结束后,再将编辑器中的内容应用到模型里即可。(作为类似的功能请参考:给表格的 单元格增加编辑功能)

[Eclipse]GEF入门系列(四、其他功能) - 编程入门网

图1 Direct Edit

在GEF里,这个弹出的编辑器由DirectEditManager类负责管理,在 我们的NodePart类里,通过覆盖performRequest()方法响应用户的DirectEdit请求,在这个 方法里一般要构造一个DirectEditManager类的实例(例子中的NodeDirectEditManager), 并传入必要的参数,包括接受请求的EditPart(就是自己,this)、编辑器类型(使用 TextCellEditor)以及用来定位编辑器的CellEditorLocator(NodeCellEditorLocator), 然后用show()方法使编辑器显示出来,而编辑器中显示的内容已经在构造方法里得到。简单 看一下NodeCellEditorLocator类,它的关键方法在relocate()里,当编辑器里的内容改变时 ,这个方法被调用从而让编辑器始终处于正确的坐标位置。DirectEditManager有一个重要的 initCellEditor()方法,它的主要作用是设置编辑器的初始值。在我们的例子里,初始值设 置为被编辑NodePart对应模型 (Node)的name属性值;这里还另外完成了设置编辑器字体和 选中全部文字(selectAll)的功能,因为这样更符合一般使用习惯。

在NodePart里 还要增加一个角色为DIRECT_EDIT_ROLE的EditPolicy,它应该继承自DirectEditPolicy,有 两个方法需要实现:getDirectEditCommand()和showCurrentEditValue(),虽然还未遇到过 ,但前者的作用你不应该感到陌生--在编辑结束时生成一个Command对象将修改结果作用到模 型;后者的目的是更新Figure中的显示,虽然我们的编辑器覆盖了Figure中的文本,似乎并 不需要管Figure的显示,但在编辑中时刻保持这两个文本的一致才不会出现"盖不住 "的情况,例如当编辑器里的文本较短时。

[Eclipse]GEF入门系列(四、其他功能)(2)

时间:2011-04-19 cnblogs bjzhanghao

实现属性页

在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号