java 事件处理

Java事件处理机制:EventObject类作为描述事件信息的事件信息类的基类,由EventListener接口派生新的接口或类来作为事件接收方的类,再定义事件源类

事件信息类构造方法必须含有事件源参数和事件信息字符串;事件接收方事件处理方法必须含有事件信息对象作为参数;事件源类负责事件接收方的注册取消注册事件触发通知事件接收方处理事件。                嘿嘿,如有转载,请声明http://www.cnblogs.com/jinmoon/;                 

本实例是火灾报警后火警和学生的事件处理

import java.util.EventListener;
import java.util.EventObject;
import java.util.Scanner;

public class Test {
public static void main(String[] args) {
HuoJin t = new HuoJin();
JiaRe s = new JiaRe();
Student a=new Student();
a.addStudent(s);
s.addPeople(a);
t.addStudent(s);
s.addTeacher(t);
s.Ask();
}
}
//火警
class HuoJin implements Q_or_A_Listener{
JiaRe s = null;

public void addStudent(JiaRe s) {
if (this.s == null)
this.s = s;                                           //注册,
}
public void removeStudent(JiaRe s) {
if (this.s == null)
return;                                  //取消注册
this.s = null;
}
public void Q_or_A_Event(Q_or_A q){//处理事件,回答问题
System.out.println("火警   灭火");
/* String a;
int i = Integer.valueOf(q.getQ_or_A()).intValue();
System.out.println(q.getQ_or_A());
if(i>80){
a = "HuoJin 灭火"; 
}
else{
a = "HuoJin 工作";
}

if (this.s == null){
System.out.println("没有注册!");
return;
}            //没有注册监视器,不触发事件。
Q_or_A event = new Q_or_A(this, a); //创建事件对象
Notify(event); */                          //通知火警
}
private void Notify(Q_or_A event){
this.s.Q_or_A_Event(event);              //调用学生的事件处理方法,传递事件对象
}

}
//学生
class Student implements Q_or_A_Listener{
JiaRe s = null;

public void addStudent(JiaRe s) {
if (this.s == null)
this.s = s;                                   //注册
}
public void removeStudent(JiaRe s) {
if (this.s == null)
return; //从未注册过,不用取消。
this.s = null;
}
public void Q_or_A_Event(Q_or_A q){//处理事件,回答问题
System.out.println("学生   逃跑");
/* String a;
// System.out.println(q.getQ_or_A());
int i = Integer.valueOf(q.getQ_or_A()).intValue();
if(i>80){
a = "Student 逃跑"; 
}
else{
a = "Student 学习";
}

if (this.s == null){
System.out.println("没有注册!");
return;
} //没有注册监视器,不触发事件。
Q_or_A event = new Q_or_A(this, a); //创建事件对象
Notify(event); */ //通知学生
}
private void Notify(Q_or_A event){
this.s.Q_or_A_Event(event); //调用学生的事件处理方法,传递事件对象
}

}
//加热器类
class JiaRe implements Q_or_A_Listener{
HuoJin t = null;
Student b = null;

public void addTeacher(HuoJin t) {
if (this.t == null)
this.t = t; //申请火警
}
public void addPeople(Student t) {
if (this.t == null)
this.b = t; //申请学生
}
public void removeTeacher(HuoJin t) {
if (this.t == null)
return; //从未注册过,不用取消
this.t = null;
}
public void removePeople(Student t) {
if (this.b == null)
return; //从未注册过,不用取消
this.b = null;
}
protected void Ask() {
if (t == null)
return; //没有注册火警,不提问
String s = String.valueOf(WenDu());    //字符串转换成整形
int i = Integer.valueOf(s).intValue();      //整形转换成字符
Q_or_A event = new Q_or_A(this, s); //构造函数事件初始化
if(i>80){
System.out.println(s);
Notify(event); //处理事件,通知监视器,即接收者
} /
else{
System.out.println(s);
System.out.println("安全");
}

}
public int WenDu()
{
Scanner scanner=new Scanner(System.in);
int wendu=(int)(Math.random()*100);
return wendu;
}
private void Notify(Q_or_A event){
this.t.Q_or_A_Event(event);
this.b.Q_or_A_Event(event);
//调用火警,学生,的事件处理方法,传递事件对象
}
public void Q_or_A_Event(Q_or_A a){ //事件处理方法,接收答案
System.out.println(a.getQ_or_A());
}
}
//接口
interface Q_or_A_Listener extends EventListener { //意义就在于告诉所有的调用者,我是一个监听器。
public void Q_or_A_Event(Q_or_A event);
}
//事件信息类
class Q_or_A extends EventObject{//定义事件状态类,或称为事件信息类。用于描述事件信息
private String Q_or_A = "";

public Q_or_A( Object source, String doorState ) { //明确事件源和事件信息
super(source); // 它封装了父类EventObject的getSource方法,得到的就是事件源。
this.Q_or_A = doorState;
}

public void setQ_or_A( String doorState ) {
this.Q_or_A = doorState;
}

public String getQ_or_A() { //返回的就是事件源(即教师、即被观察者),
return this.Q_or_A;
}

}

原文地址:https://www.cnblogs.com/jinmoon/p/8038369.html