在很多时候,我们都要用到自己抛出事件,所以就必须了解事件的机制
以SelectionListener中的widgetSelected为例子
Button btn = new Button(shell, 0);
btn.setText("这是测试");
btn.addListener(SWT.Selection, new Listener() {
//相当于btn.addSelectionListener(new SelectionListener)实现了widgetSelected
@Override
public void handleEvent(Event arg0) {
System.err.println("我被点击了");
}
});
//自己抛出事件,swt.selection事件
btn.notifyListeners(SWT.Selection, null);
在addListener(int eventType,Listener listener);的方法中
eventType 就是事件的类型
listener 就是事件的实现接口
其实事件机制就是监听者模式,eventType就是监听的事情类型,而widgetSelected的事件类型就是SWT.Selection,btn每次点击中都会触发很多种事件类型,比如说mouseListener,selectionListener,但我们在事件列表中监听到了selection的事件,当selection发生的时候,就会触发selectionListener这个实现类。这种就是监听者模式。
而在selectionListener中还包括了widgetDefaultSelected,而这个widgetDefaultSelected的事件类型就是SWT.DefaultSelection。
所有的addXXXListener事件都是通过notifyListeners来实现的,只不过,它将事件的类型隐藏了起来,同时将多种事件类型封装到大的listener中。
就好像,mouseListener中
btn.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDown(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDoubleClick(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
这个事件,等效于
btn.addListener(SWT.MouseUp, new Listener(){@Override
public void handleEvent(Event arg0) {
// TODO Auto-generated method stub
}});
btn.addListener(SWT.MouseDown, new Listener(){@Override
public void handleEvent(Event arg0) {
// TODO Auto-generated method stub
}});
btn.addListener(SWT.MouseDoubleClick,new Listener(){@Override
public void handleEvent(Event arg0) {
// TODO Auto-generated method stub
}});
可能说的有点啰嗦,反正就是这么回事,事件的实现模式,就是监听者模式。
如有说错,请轻拍。