对于Java监听器的理解

时间:2021-06-02 22:35:38
      监听器模式,包括三个重要的对象,即事件源、事件对象以及监听器对象。

      对于Java监听器的理解

      事件源将在发生事件时向所有的注册的监听器发送事件对象,监听器对象使用事件对象中的信息来确定它们对事件的响应。

       理解如下:事件源对象首先注册监听器对象,当触发事件源时事件源发送事件对象,eg:如果是按钮源则将按钮的动作事件对象发送给监听器对象,有监听器对象处理事件对象,其中事件对象封装或者说是包含了事件源对象的信息。
        那么问题是,事件对象是如何什么时候产生的,又是如何传入到监听器对象中的?

        即点击click时执行AbstractButton中的doClick(int)方法,触动DefaultButtonModel中的
        setPressed(boolean),进而执行fireActionPerformed(),回调监听器类。

        例子:

package Test;

import java.util.List;
import java.util.Vector;

public class PersonSource {
	private List<PersonListener> listeners = new Vector<PersonListener>();
	public void eat(){
		for(PersonListener t:listeners){
			t.isCanEat(new PersonEvent(this));
		}
	}
	public void run(){
		
	}
	public void addPersonListener(PersonListener listener){
		listeners.add(listener);
	}
	public void removePersonListener(PersonListener listener){
		listeners.remove(listener);
	}
	
	public static void main(String[] args) {
		PersonSource person = new PersonSource();
		person.addPersonListener(new PersonListener() {
			
			@Override
			public void isCanEat(PersonEvent event) {
				PersonSource source = event.getSource();
				System.out.println(source.getClass());
			}
		});
		person.eat();
	}
}

package Test;

public interface PersonListener {
	public void isCanEat(PersonEvent event);
}

package Test;

public class PersonEvent {
	private PersonSource person;
	public PersonEvent(PersonSource person){
		this.person = person;
	}
	public PersonSource getSource(){
		return person;
	}
}