现在的位置: 首页 > 综合 > 正文

GEF 学习系列之六:图元的选择框和反馈显示

2013年02月27日 ⁄ 综合 ⁄ 共 3403字 ⁄ 字号 评论关闭

图元的选择框和反馈


对于非矩形的图元,默认情况下在选中时任然显示一个矩形的选中框,在选择框上显示了东南西北四个句柄,在
GEF
中,这些也是可以订制的,具体方法如下:

1)     


修改内容视图控制器的布局编辑策略
ShapesXYLayoutEditPolicy
,覆盖其方法
EditPolicy
createChildEditPolicy(EditPart child)

。缺省情况下,此方法返回一个
ResizableEditPolicy
对象,我们要定义自己的子类(
EllipseResizableEditPolicy
)替代它作为返回值。代码如下:


2)     


EllipseResizableEditPolicy
里需要覆盖
ResizableEditPolicy
的两个方法,
createSelectionHandles()
方法决定“控制柄”(
ResizeHandle
)和“选择框”(
MoveHandle
)的相关情况;
createDragSourceFeedbackFigure()
方法决定用户拖动图形时,随鼠标移动的反馈图形的形状和颜色。类的代码如下:

运行后的效果如图所示:

 

图元的反馈

    
反馈是很好的提高界面友好度的方式,实际上在上面的例子中已经讲到了自定义反馈的实现,就是继承

ResizableEditPolicy
实现自己的编辑策略来替换系统默认的灰色矩形框。

      反馈有两种:Source Feedback(源反馈)和Target
Feedback(目标反馈)。鼠标操作的图形叫源,鼠标移动时经过的地方叫目的。在图中,那个椭圆就是源,而那个虚影就是源反馈,而目标就是你鼠标具体指向的地方了,如果你的鼠标停在一个矩形上,那么那个矩形就是目标,由目标提供的反馈就叫目标反馈。一般我们在GEF中见到的反馈都是一些视觉上的效果,比如图中的虚影。如果你愿意,你可以播放一段音乐或者别的什么,所以反馈并不限于视觉效果。对于视觉上的效果而言,GEF提供了一个缺省的层,叫做Feedback
Layer(反馈层),我们看到的图形一般都是添加到反馈层的。

     还有一个问题就是反馈的触发时机。反馈到底是在什么时候才会出现呢?对于源反馈,它是在拖动的时候触发的,对于目标反馈,鼠标的移动,进入或者拖动都有可能触发。但是这只是一般的情况,是GEF缺省的情况。如果你需要在更多的场合显示反馈,需要多实现一些方法罢了,但是也并不复杂。

    自定义源反馈上面已经说过了,就是继承 ResizeEditPolicy 类并覆盖方法 createDragSourceFeedbackFigure(),在此方法中返回反馈的图形即可。在我们再来考虑目标反馈。我们希望在拖动的时候显示一个坐标信息,那么拖动这个动作是一个布局相关的东西,应该是归一个具有Layout角色的EditPart负责的。在我们的例子里,图形是放在Diagram里面的,所以对于目标反馈,我们仍然需要修改ShapesXYLayoutEditPolicy。具体方法如下:

以上2个方法,一个用来创建目标反馈,一个用来移除目标反馈,效果如图所示,在源反馈下面现实的一个坐标信息即为目标反馈:

 

 

抱歉!评论已关闭.