事件处理循环的程序代码 le(1) read_event(myevent) switch(myevent typer case type_1: do type1 process(;/*处理对应事件1的 动作*/ break case type_2 do type2_processo break; case type_n do typen_process: break 人机交互技术编写组
人机交互技术编写组 11 事件处理循环的程序代码 while(1){ read_event(myevent); switch(myevent.type){ case type_1: do_type1_process(); /*处理对应事件1的 动作*/ break; case type_2: do_type2_process(); break; … case type_n: do_typen_process(); break; } }
2事件注册方式 ◆窗口系统为每一个应用程序建立一个事件处 理中心,事件处理中心负责事件的处理。应 用程序将自己感兴趣的事件处理事先通过登 记注册的方式通知事件处理中心,注册时同 时告诉事件处理中心当事件产生时,应用程 序需要进行的处理(回应过程)。 ◆当事件处理中心从窗口系统接收一个事件, 分析这个事件属于哪个应用程序,然后把事 件和控制转向该事件注册的回应过程,处理 完后,回应过程把控制返还给事件处理中心, 事件中心继续接收事件或者请求终止。 人机交互技术编写组 12
人机交互技术编写组 12 2.事件注册方式 窗口系统为每一个应用程序建立一个事件处 理中心,事件处理中心负责事件的处理。应 用程序将自己感兴趣的事件处理事先通过登 记注册的方式通知事件处理中心,注册时同 时告诉事件处理中心当事件产生时,应用程 序需要进行的处理(回应过程)。 当事件处理中心从窗口系统接收一个事件, 分析这个事件属于哪个应用程序,然后把事 件和控制转向该事件注册的回应过程,处理 完后,回应过程把控制返还给事件处理中心, 事件中心继续接收事件或者请求终止
应用程序 通知者 开始 向通知者注册回调函数 启动通知者 读输入 结束 处理事件 发送给正确的回调函数 否 情求回应 退出? 是 图7-3事件注册方式处理流程图 人机交互技术编写组 13
人机交互技术编写组 13 应用程序 开始 启动通知者 处理事件 读输入 请求回应 退出? 是 否 通知者 图7-3 事件注册方式处理流程图 发送给正确的回调函数 向通知者注册回调函数 结束
2事件注册方式 ◆这种方式的好处是一般应用程序不需要设计 事件处理循环,只关心应用程序需要处理哪 些交互事件,当事件发生时应用程序如何处 理。当应用程序不需要处理某个事件时,应 用程序还可以随时取消注册。因为只处理注 册的事件,事件处理中心处理事件的效率相 对比较高。Java语言中图形界面的交互就是采 用的这种事件注册方式,下面的程序清单7-2 说明了应用程序如何通知注册事件,事件处 理中心通过什么方式调用应用程序的回调函 数。 人机交互技术编写组
人机交互技术编写组 14 2.事件注册方式 这种方式的好处是一般应用程序不需要设计 事件处理循环,只关心应用程序需要处理哪 些交互事件,当事件发生时应用程序如何处 理。当应用程序不需要处理某个事件时,应 用程序还可以随时取消注册。因为只处理注 册的事件,事件处理中心处理事件的效率相 对比较高。Java语言中图形界面的交互就是采 用的这种事件注册方式,下面的程序清单7-2 说明了应用程序如何通知注册事件,事件处 理中心通过什么方式调用应用程序的回调函 数
程序清单7-2 quit. java import java. awt. import java. awt event. class Quit extends frame implements Actionlistener Button cancel Button, ok Button; public quito cancelButton= new Button( Cancel") ok Button=new Button("OK") setlayout(new Flow Layout) add(cancelButton) add(okButton) add WindowListener(new Program TerminatorO) cancelButton addActionListener(this) okButton addActionListener(this) 人机交互技术编写组 15
人机交互技术编写组 15 程序清单7-2 quit.java import java.awt.*; import java.awt.event.*; class Quit extends Frame implements ActionListener { Button cancelButton, okButton; public Quit() { cancelButton = new Button("Cancel"); okButton = new Button("OK"); setLayout(new FlowLayout()); add(cancelButton); add(okButton); addWindowListener(new ProgramTerminator()); cancelButton.addActionListener(this); okButton.addActionListener(this); }