Java 自定义事件

今天在学习Spring的IoC容器时,看到自定义事件,书上说通过提供一套基于Java SE标准自定义事件类而实现的,对Java的自定义事件很陌生,所以学习一下,特此记忆。

信接触过Java Swing的人对事件都不会陌生,例如处理按钮点击事件时,我们先要实例化一个JButton,然后为这个按钮添加ActionListener.可以参照以下代码:

public class MyFrame{
	//声明一个JButton
	private JButton button;

	public MyFrame(){
		button = new JButton("OK");
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("OK pressed");
			}	
		});		
	}
	
	
}

这样,当点击按钮时便会输出   OK pressed   。 

现在我们可以自己实现基于事件驱动的程序,下面我们类比上面的程序实现我们自己的事件。

0、相关流程:

实现自己的事件(对应于ActionEvent)---->实现相应的Listener(对应于ActionListener)------->在自定义的类中产生事件(对应于JButton类)-------->使用自定义类(类似于使用JButton)

1、实现自己的事件--------对应于ActionEvent

public class MyEvent extends EventObject{
	
	private String name;
	public MyEvent(Object source,String name) {
		super(source);
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
}
这里的MyEvent就相当于ActionEvent,而构造方法中的source可以通过getSource()方法获取。可以定义为产生事件的实例。如点击按钮时,获得被点击的按钮实例。


2、实现相应的Listener

public interface MyEventListener extends EventListener{
	
	void HandleMyName(MyEvent ea);
	
}

这个没什么可说的,就是定义了一个接口。


3、实现自定义的类------可以类比JButton理解

public class UseEvent {
	//保存所有的listener
	private ArrayList<MyEventListener> listeners = new ArrayList<MyEventListener>();
	
	//添加Listener
	public void addMyEventListener(MyEventListener lis){
		listeners.add(lis);
	}
	
	//移除Listener
	public void removeMyEventListener(MyEventListener lis){
		listeners.remove(lis);
	}
	
	//产生事件,可以类比JButton的点击
	public void generateEvent(){
		MyEvent me = new MyEvent(this,"Casin");
		notifyListener(me);
	}
	
	//通知所有的Listener,发生了事件
	public void notifyListener(MyEvent ea){
		for(MyEventListener listener : listeners){
			listener.HandleMyName(ea);
		}
	}
	
}


4、最后使用自定义类,可以类比于使用JButton

public class Test {
	
	public static void main(String[] args){
		UseEvent use = new UseEvent();
		use.addMyEventListener(new MyEventListener(){

			@Override
			public void HandleMyName(MyEvent ea) {
				// TODO Auto-generated method stub
				System.out.println("This is a listener" + ea.getName());
			}
			
		});
		
		use.generateEvent();
	}
}


5、结果

Java 自定义事件_第1张图片


你可能感兴趣的:(java,EventObject,自定义事件)