在研究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;