如下:
protected class EventHandler
implements MouseMoveListener, MouseListener, AccessibleControlListener, KeyListener,
TraverseListener, FocusListener, AccessibleListener, MouseTrackListener,
Listener, DisposeListener{
.....//代码省略
}
即EventHandler类作为监听器注册到LWS的canvas上。
EventHandler监听到感兴趣的事件后,将这些事件交给EventDispatcher,然后EventDispatcher将SWT事件转化为Draw2d事件,最后EventDispatcher将事件转发给各个Figure。
这中间有一个过程是,将SWT事件转化为Draw2d事件,这个转化工作也是交由EventDispatcher来做的。
可通过查看SWTEventDispatcher的源代码,示例:
public void dispatchMouseExited(org.eclipse.swt.events.MouseEvent me) {
setHoverSource(null, me);
if (mouseTarget != null) {
currentEvent =
new MouseEvent(me.x, me.y, this, mouseTarget, me.button, me.stateMask);//将SWT事件转化为Draw事件
mouseTarget.handleMouseExited(currentEvent);
releaseCapture();
mouseTarget = null;
}
}
至此,完成了SWT事件到Draw2d事件的转化。同时将其分发给相应的Figure处理(代码体现为mouseTarget.handleMouseExited(currentEvent))。