zoukankan      html  css  js  c++  java
  • 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;
    }

    }

  • 相关阅读:
    Format中的转换说明符
    网络通信数据包与串口通信数据包异同:
    指针容器的类型和用法
    cimge 这次能够图片大小尺寸
    三分钟快速上手TensorFlow 2.0 (后续)——扩展和附录
    三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速
    三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署
    三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化
    检查自己的numpy是否有依赖blas
    TensorFlow 2.0快速上手指南12条
  • 原文地址:https://www.cnblogs.com/jinmoon/p/8038369.html
Copyright © 2011-2022 走看看