关于swt中的事件机制

在很多时候,我们都要用到自己抛出事件,所以就必须了解事件的机制

以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

 

 

}});

可能说的有点啰嗦,反正就是这么回事,事件的实现模式,就是监听者模式。

如有说错,请轻拍。

你可能感兴趣的:(事件机制)