监听器Listener

一.监听器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为不同的事件类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值