GEF -- 学习一下调色板,我们不知道的东西(三)影子武士Tracker
http://www.cnblogs.com/wayne_wang/archive/2010/08/17/1801548.html
连接自:
在研究GEF的调色板实现时,发现了以前从没有用过的一个SWT控件,可能是因为我很少在程序中处理鼠标移动等等事件的原因吧。这个好东西就是Tracker,我非常希望能把它称为影子武士,因为Tracker常常和鼠标的点击、移动事件相配合,动态地显示所操作组件的位置大小的改变,从某种意义上来说Tracker非常像是SWT中的GEF Handle;
下面简要介绍一下它的基本使用;(插一句,在GEF的调色板实现中Tracker主要应用在了Sash Drag和调色板的Dock过程中)
Tracker直接继承自Widget,和其他的Widget一样,构造函数需要parent和style,其中parent就是我们需要跟踪的哪个控件,在这里就不赘述了。我之所以称Tracker为影子武士主要是因为Tracker可以通过一个阴影的方式显示一个矩形,这可以通过setRectangles方法来实现,有这个方法名称我们可以看出一个Tracker可以指定多个矩形,说句实话,我不是很明白设定多个矩形的必要在哪里,至少我现在还没有碰到。
当然能够设定矩形还不是最主要的,因为单单设定一个矩形的话,用户感受并不是很好,因此它还有一个方法:setStippled(boolean)用来指定是不是在Tracker中画点,这个自己试一试就知道了。一般设置为True比较好看;
此外,以上设定仅仅是基础参数的设定,那么Trcker本身是怎么工作的呢,这就要提到它的另一个方法open,只有调用了它,Tracker才会真正的显示出来,这个时候鼠标的移动就会被我们的影子武士表示出来了;
当然,为了更好的表示我们的移动方向,最好还要设置一下Tracker的cursor,方法是:setCursor;
总结一下Tracker的使用:
1、定义鼠标的点击、移动事件处理器;
2、定义Tracker为某一个组件的Tracker;
3、定义Tracker的cursor、矩形等等;
4、打开Tracker,即调用方法open;