模拟“事件监听器”(一)

原创 2013年12月04日 10:23:43

在网上搜索了很多关于事件驱动的,大部分都是介绍如何利用awt包里面的控件,然而自己却是想要了解这个是怎么设计的,因此模拟了一个简单的demo,提供自己学习

 

在讲解事件驱动模型之前,我们现在看看事件驱动模型的三大要素:

事件源:能够接收外部事件的源体。

侦听器:能够接收事件源通知的对象。

事件处理程序:用于处理事件的对象。

 

先提供一个JAVA基于awt的事件处理

package hb.client;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SimpleEventDemo extends JFrame {
	public SimpleEventDemo() {
		JButton jbtOK = new JButton("OK");
		setLayout(new FlowLayout());
		add(jbtOK);

		ActionListener listener = new OKListener();
		jbtOK.addActionListener(listener);
	}

	/** Main method */
	public static void main(String[] args) {
		JFrame frame = new SimpleEventDemo();
		frame.setTitle("SimpleEventDemo");
		frame.setLocationRelativeTo(null); // Center the frame
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(100, 80);
		frame.setVisible(true);
	}
}

class OKListener implements ActionListener {

	//acObj是用户在点击按钮的时候创建的,然后传递给Listener
	public void actionPerformed(ActionEvent acObj) {
		System.out.println(acObj.getActionCommand());
		System.out.println(acObj.getActionCommand());
	}

}

 

 

自己写的一个驱动模型图:

 

 

1、新建一个监听器接口

public interface Listener {
	public void action(Object obj);
}

 

2、实现监听器接口

public class SayListener implements Listener {

	@Override
	public void action(Object obj) {
		System.out.println(obj.toString());
	}

}

 

public class RunListener implements Listener {

	@Override
	public void action(Object obj) {
		System.out.println(obj.toString());
	}

}

 

3、创建一个事件源(这里是模拟人)

package hb.client;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class UserSource {
	//添加的监听器对象
	List<Listener> listener = new LinkedList<Listener>();

	public void addListener(Listener listener){
		this.listener.add(listener);
	}
	
	public List<Listener> getListener() {
		return listener;
	}

	public void setListener(List<Listener> listener) {
		this.listener = listener;
	}

	//根据不同的监听器对象执行不同的方法
	public void action(Object obj){
		Iterator it = listener.iterator();
		while(it.hasNext()){
			Listener listener = (Listener)it.next();
			//是“say监听器”
			if(listener instanceof SayListener){
				System.out.println("执行say方法事件");
				((SayListener)listener).action(obj);
			}
			//是"run监听器"
			if(listener instanceof RunListener){
				System.out.println("执行run方法事件");
				((RunListener)listener).action(obj);
			}
		}
	}
	
	public void say(){
		String str = "我是触发say事件产生的对象";
		action(str);
	}
	
	public void run(){
		String str = "我是触发run事件产生的对象";
		action(str);
	}
	
}

 

4、模拟客户端触发事件

public class EventTestDemo {

	public static void main(String[] args) {
		
		SayListener listener = new SayListener();
		UserSource user = new UserSource();
		//添加事件对象,如果不添加则不会触发事件的action方法
		user.addListener(listener);
		user.say();
	
	}

}

 

 

 

 

 

 

  • 61bb87bf-31c7-3f21-b74f-e38c367072b7-thumb.jpg
  • 大小: 38.9 KB

事件监听器

  • 2013年12月17日 00:04
  • 713KB
  • 下载

Android chart、图表、条形图、饼图 pie chart 等的实现及点击事件、监听器的实现 click ,achartengine

最近需要在自己的android应用上实现统计图的功能,后来定位实现饼图(扇形图),网上虽然有很多的例子和各种实现方法,但是就老是没有找到一个可以在统计图尤其是饼图中实现点击(click)功能的demo...

JList事件监听器的实现例子

  • 2016年09月01日 15:17
  • 5KB
  • 下载

java事件监听器

  • 2012年02月02日 09:38
  • 285KB
  • 下载

java设计模式--观察者模式和事件监听器模式

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事...

事件处理监听器

  • 2015年11月28日 12:25
  • 21KB
  • 下载

Java实现事件监听器的四种方式

自身类作为事件监听器 : import javax.swing.*; import java.awt.*; import java.awt.event.*; /** *Java事件处理机制:...

Java Swing 常用事件和监听器接口

  • 2009年11月24日 22:33
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟“事件监听器”(一)
举报原因:
原因补充:

(最多只允许输入30个字)