GEF中的反馈

什么是反馈?
 所谓反馈,是指操作时显示的一些提示信息,是对用户操作的某种响应,比如拖动某个图形时,我们一般会看到一个虚影,这就是反馈。
 它告诉了用户这个图形在松开鼠标之后将会被放置在什么地方,这是一种很好的提高用户友好度的方式,也是反馈的主要目的。
 
 反馈有两种:Source Feedback(源反馈)和Target Feedback(目标反馈)。鼠标操作的图形叫源,鼠标移到时经过的地方叫目的。
 如果你的鼠标停在一个矩形上,那么那个矩形就是目标,由目标提供的反馈就叫目标反馈。
 一般我们在GEF中见到的反馈都是一些视觉上的效果,比如虚影。如果你愿意,你可以播放一段音乐或者别的什么,所以反馈并不限于
 视觉效果。对于视觉上的效果而言,GEF提供了一个缺省的层,叫Feedback  Layer(反馈层),我们看到有关反馈的图形都是添加到反馈层的。
 
 还有一个问题就是反馈的触发时机。反馈到底是在什么时候才会出现呢?对于源反馈,它是在拖动的时候触发的,对于目标反馈,鼠标的移动,进入或者拖动都有可能触发。但是这只是一般的情况,是GEF缺省的情况。如果你需要在更多的场合显示反馈,需要多实现一些方法罢了,但是也并不复杂。
 
 显示反馈的方法原型,可查看EditPart的源码:
 
 void showSourceFeedback(Request request)
 void showTargetFeedback(Request request)
 方法的参数为Request对象。所以Request对象是我们判断显示何种反馈的主要依据。GEF的缺省的Request类型都定义在RequestConstants接口中,而我们也可以自定义Request。于是,"显示什么样的反馈"这个问题也清楚了。
 
 
 
 自定义Feedback
 通过阅读AbstractEditPart的源码可以发现,它实际是把showSourceFeedback和showTargetFeedback都转发给了EditPolicy来完成,所以自定义Feedback正确的做法应该是实现一个自定义的EditPolicy并安装到EditPart中。这里又有一个问题,应该安装到哪个角色上呢?
 和拖动相关的角色叫Primary Drag,这个角色是的Policy是由父类提供的。
 
 
 代码如下:/**
 * Shows or updates source feedback for the given
 * <code>Request</code>. By default, this responsibility is delegated to this part's
 * EditPolicies.  Subclasses should rarely extend this method.
 * <P>
 * <table>
 *   <tr>
 *     <td><img src="../doc-files/important.gif"/>
 *     <td>It is recommended that feedback be handled by EditPolicies, and not directly by
 *     the EditPart.
 *   </tr>
 * </table>
 * @see EditPolicy#showSourceFeedback(Request)
 * @see EditPart#showSourceFeedback(Request)
 * @param request the Request
 */
public void showSourceFeedback(Request request) {
 if (!isActive())
  return;
 EditPolicyIterator i = getEditPolicyIterator();
 while (i.hasNext())
  i.next()
   .showSourceFeedback(request);
}

 

附:

反馈技术
视觉反馈是一个图形化编辑器用户界面重要的组成部分。GEF用很多方法为用户提供反馈。
1.改变光标。当在图形化编辑器上选定目标时,改变光标来显示所选的目标是否支持该工具的操作。
2.区别被选的和被聚焦的部分。一般的,在相同类型的部分中,一个被选择的部分应该和没有被选择的部分明显的区分。
这个可以通过在部分外增加一个被选择图形或改变部分的颜色或形状。
3.展示操作柄(handle):操作柄也是一个图形元素,一般出现在部分的四周,它表示图形可以被移动或是改变大小。
一般反馈技术是由编辑策略[EditPolicy]实现的。具体实现的是EditPolicy的子类GraphicalEditPolicy。
GEF提供一个反馈层,所有的反馈都在该层上显示。层本身就是一个图形,只不过对用户来说是透明的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值