一.监听器Listener
(1)监听器就是接收事件发生的对象,负责处理事件到达后响应事件的代码。
(2)监听器对象实质是一个接口,要响应一个事件就是要实现该接口中的方法。
(3)监听器类的形式是XXXListener,XXX表示某一类型的监听器。
常用的监听器有鼠标监听器(MouseListener),键盘监听器(KeyListener),选择监听器(SelectionListener)。
(4)一个类型的监听器中有不同的响应事件的方法。
例如:SelectionListener中要实现widgetSelected和widgetDefaultSelected两个方法。
widgetSelected表示选中事件,对于列表来说,就是单击列表中的一项所调用的方法。对于按钮来说,就是单击这个按钮所调用的方法。
widgetDefaultSelected事件对于列表来说,就是双击列表中的一个项所调用的方法。
所以说,同样是选中监视器,单击和双击所触发的事件时不一样的,因此要区别监视器中的方法是响应何种类型的事件。
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
public class A{
public static void main(String[] args){
Display display=new Display();
Shell shell=new Shell(display);
shell.setText("Listener");
shell.setLayout(new FillLayout());
final List list=new List(shell,SWT.NONE);
for(int i=0;i<10;i++){
list.add("item"+i);
}
//事件处理的步骤
list.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e){
System.out.println("widgetSelected事件");
}
public void widgetDefaultSelected(SelectionEvent e){
System.out.println("widgetDefaultSelected事件");
}
});
//打开窗口,进行窗口的显示
//shell.setSize(400,400);
shell.pack();
shell.open();
while(!shell.isDisposed()){
//当窗口没有被释放的时候
if(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
}
二.事件Event
当一个事件到达事件监听对象那里时,会携带一些该事件所附加的一些信息。
比如事件发生的时间,事件是由哪一个控件发生的。
这些信息都是通过XXXEvent形式来表示的,其中XXX表示事件的类型。
例如:本例中,选中对象对应的是SelectionEvent对象,可以通过该对象获得发生该事件的一些信息,利用以下代码可以获得事件源控件。
public void widgetSelected(SelectionEvent event){
List l=(List)event.widget;
System.out.println("widgetSelected事件");
}
event.widget获得的控件对象需要进行强制类型转换。
每个事件所携带的信息稍有不同。但不论是什么事件,都可以从事件中获得以下信息。
event.display:事件发生时的Display对象。
event.data:保存系统使用的数据,一般不常用。
event.widget:事件发生的控件对象,通常需要强制类型转换,因为所有的控件都继承自widget类。
event.time:事件发生时的事件。
三.适配器
XXXAdapter的类都是适配器类。
//事件处理的步骤
list.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e){
System.out.println("widgetSelected事件");
}
public void widgetDefaultSelected(SelectionEvent e){
System.out.println("widgetDefaultSelected事件");
}//两个都需要
});
上面的可以替换成下面的适配器类
list.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
System.out.println("widgetSelected事件");
}
});
四.为控件响应事件的方法有以下几个步骤
(1)创建监听器对象,实现监听器中的方法。(XXXListener)。
(2)为控件注册监听器(addXXXListener)。
(3)控件与监听器之间的桥梁是事件对象(XXXEvent)。
(4)对于监听器的接口中有对多个事件响应方法的,也可以使用响应的适配器(XXXAdapter),通过覆盖父类中的方法来创建监听器的对象。其中XXX为不同的事件类型。