最近由于实验室任务繁重
![](/icons/68120dou.gif)
![](/icons/68120yi.gif)
直没有继续研究GEF
![](/icons/68120dou.gif)
本来已经掌握
![](/icons/68120de.gif)
![](/icons/68120yi.gif)
些东西好象又丢掉了不少
![](/icons/68120dou.gif)
真是无奈啊
![](/icons/68120dou.gif)
看来还是要经常碰碰
![](/icons/68120dou2.gif)
刚刚接触GEF
![](/icons/68120de.gif)
朋友大都会有这样
![](/icons/68120de.gif)
印象:GEF里概念太多
![](/icons/68120dou.gif)
比较绕
![](/icons/68120dou.gif)
![](/icons/68120yi.gif)
些能直接实现
![](/icons/68120de.gif)
功能非要拐几个弯到另
![](/icons/68120yi.gif)
个类里做
![](/icons/68120dou.gif)
而且很多类
![](/icons/68120de.gif)
名字十分相似
![](/icons/68120dou.gif)
加上不知道他们
![](/icons/68120de.gif)
作用
![](/icons/68120dou.gif)
感觉就好象
![](/icons/68120yi.gif)
团乱麻
![](/icons/68120dou2.gif)
我觉得这种情况是由图形用户界面(GUI)
![](/icons/68120de.gif)
复杂性所决定
![](/icons/68120de.gif)
![](/icons/68120dou.gif)
GUI看似简单
![](/icons/68120dou.gif)
实际上包含了相当多
![](/icons/68120de.gif)
逻辑
![](/icons/68120dou.gif)
特别是GEF处理
![](/icons/68120de.gif)
这种图形编辑方式
![](/icons/68120dou.gif)
可以说是最复杂
![](/icons/68120de.gif)
![](/icons/68120yi.gif)
种
![](/icons/68120dou2.gif)
GEF里每
![](/icons/68120yi.gif)
个类
![](/icons/68120dou.gif)
应该说都有它存在
![](/icons/68120de.gif)
理由
![](/icons/68120dou.gif)
我们要尽可能了解作者
![](/icons/68120de.gif)
意图
![](/icons/68120dou.gif)
这就需要多看文档和好
![](/icons/68120de.gif)
例子
![](/icons/68120dou2.gif)
在Eclipse里查看文档和代码相当便利
![](/icons/68120dou.gif)
比如我们对某个类
![](/icons/68120de.gif)
使用方法不清楚
![](/icons/68120dou.gif)
![](/icons/68120yi.gif)
般首先找它
![](/icons/68120de.gif)
注释(选中类或思路方法按F2)
![](/icons/68120dou.gif)
其次可以查看它在其他地方使用方法(选中类或思路方法按Ctrl+Sh
![](/icons/68120if.gif)
t+G)
![](/icons/68120dou.gif)
还可以找它
![](/icons/68120de.gif)
源代码(Ctrl+鼠标左键或F3)来看
![](/icons/68120dou.gif)
另外Ctrl+Sh
![](/icons/68120if.gif)
t+T可以按名称查找
![](/icons/68120yi.gif)
个类等等
![](/icons/68120dou2.gif)
学GEF是少不了看代码
![](/icons/68120de.gif)
![](/icons/68120dou.gif)
当然还需要时间和耐心
![](/icons/68120dou2.gif)
好
![](/icons/68120dou.gif)
闲话少说
![](/icons/68120dou.gif)
下面进入正题
![](/icons/68120dou2.gif)
这篇帖子将继续上
![](/icons/68120yi.gif)
篇内容
![](/icons/68120dou.gif)
主要讨论如何实现DirectEdit、属性页和大纲视图
![](/icons/68120dou.gif)
这些都是
![](/icons/68120yi.gif)
个完整GEF应用
![](/icons/68120chengxu.gif)
需要提供
![](/icons/68120de.gif)
基本功能
![](/icons/68120dou2.gif)
实现DirectEdit
所谓DirectEdit(也称In-Place-Edit)
![](/icons/68120dou.gif)
就是允许用户在原本显示内容
![](/icons/68120de.gif)
地方直接对内容进行修改
![](/icons/68120dou.gif)
例如在Windows资源管理器里选中
![](/icons/68120yi.gif)
个文件
![](/icons/68120dou.gif)
然后按F2键就可以开始修改文件名
![](/icons/68120dou2.gif)
实现DirectEdit
![](/icons/68120de.gif)
原理很直接:当用户发出修改请求(REQ_DIRECT_EDIT)时
![](/icons/68120dou.gif)
就在文字内容所在位置覆盖
![](/icons/68120yi.gif)
个文本框(也可以是下拉框
![](/icons/68120dou.gif)
这里我们只讨论文本
![](/icons/68120de.gif)
情况)作为编辑器
![](/icons/68120dou.gif)
编辑结束后
![](/icons/68120dou.gif)
再将编辑器中
![](/icons/68120de.gif)
内容应用到模型里即可
![](/icons/68120dou2.gif)
(作为类似
![](/icons/68120de.gif)
功能请参考:给表格
![](/icons/68120de.gif)
单元格增加编辑功能)
![](http://www.crazycoder.cn/WebFiles/20091/d5302e7b-a3f7-493f-8a8f-4d49c3c00a49.g<img src='/icons/68120if.gif' />)
图3 大纲视图
P.S.写这篇帖子
![](/icons/68120de.gif)
时候
![](/icons/68120dou.gif)
我对例子又做了
![](/icons/68120yi.gif)
些修改
![](/icons/68120dou.gif)
都是和这篇帖子所说
![](/icons/68120de.gif)
内容相关
![](/icons/68120de.gif)
![](/icons/68120dou.gif)
所以如果你以前下载过
![](/icons/68120dou.gif)
会发现那时
![](/icons/68120de.gif)
代码和现在稍有区别(功能还是完全
![](/icons/68120yi.gif)
样
![](/icons/68120de.gif)
![](/icons/68120dou.gif)
下载)
![](/icons/68120dou2.gif)
另外要说
![](/icons/68120yi.gif)
下
![](/icons/68120dou.gif)
这个例子并不完善
![](/icons/68120dou.gif)
比如删除
![](/icons/68120yi.gif)
个节点
![](/icons/68120de.gif)
时候
![](/icons/68120dou.gif)
它
![](/icons/68120de.gif)
连接就没同时删除
![](/icons/68120dou.gif)
![](/icons/68120yi.gif)
些键盘快捷键不起作用
![](/icons/68120dou.gif)
还存在很多被注释掉
![](/icons/68120de.gif)
代码等等
![](/icons/68120dou2.gif)
如果有兴趣你可以来修改它们
![](/icons/68120dou.gif)
也是不错
![](/icons/68120de.gif)
学习途径