AWT事件处理机制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
捕获事件
public boolean action(Event evt, Object arg) { if(evt.target.equals(b1)) getAppletContext().showStatus("Button 1"); else if(evt.target.equals(b2)) getAppletContext().showStatus("Button 2"); // Let the base class handle it: else return super.action(evt, arg); return true; // We've handled it here } } ///:~
层次模型(JDK1.0)
这种模型有一个显著的优点: 它简单,而且非常适合面向对象的编程环境; 说到底,所有的组件都继承了java.awt.Component类, 而handleEvent()就在java.awt.Component类中。 然而,这种模型也存在缺点: 事件只能由产生这个事件的组件或包含这个组 件的容器处理。这个限制违反了面向对象编程的一个 基本原则:功能应该包含在最合适的类中。而最适合 处理事件的类往往并不是源组件的容器层次中的成员。 大量的CPU周期浪费在处理不相关的事件上。任何对 于程序来说不相关或者并不重要的事件会沿容器层次 一路传播,直到最后被抛弃。不存在一种简单的方法 来过滤事件。
Mouse button
MouseListener
Key
KeyListener
多监听者
多监听者可以使一个程序的不相关部分执行同样的 动作。 动作。 事件发生时, 事件发生时,所有被注册的监听者的处理器都会被 调用 AWT事件监听框架事实上允许同一个组件带有多 个监听者。一般地,如果你想写一个程序,它基于 一个事件而执行多个动作,把那些行为编写到处理 器的方法里即可。然而,有时一个程序的设计要求 同一程序的多个不相关的部分对于同一事件作出反 应。这种情况是有可能的,例如,将一个上下文敏 感的帮助系统加到一个已存在的程序中。 监听者机制允许你调用addXXXlistener方法任意 多次,而且,你可以根据你的设计需要指定任意多 个不同的监听者。事件发生时,所有被注册的监听 者的处理器都会被调用。
AWT事件处理机制
什么是事件? 事件-描述发生了什么的对象 事件源-事件的产生器 事件处理器-接收事件、解释事 件并处理用户交互的方法
AWT事件处理机制
事件源是一个事件的产生者。例如,在 Button组件上点击鼠标会产生以这个 Button 为源的一个ActionEvent. 这个 ActionEvent实例是一个对象,它包含关 于刚才所发生的那个事件的信息的对象 事件处理器就是一个接收事件、解释事 件并处理用户交互的方法。
AWT事件处理机制
action()拥有两个自变量:第一个是事件的类 型,包括所有的触发调用action()的事件的有 关信息。例如鼠标单击、普通按键按下或释 放、特殊按键按下或释放、鼠标移动或者拖 动、事件组件得到或丢失焦点,等等。第二 个自变量通常是我们忽略的事件目标。第二 个自变量封装在事件目标中,所以它像一个 自变量一样的冗长。 需调用action()时情况非常有限:将控件置入 窗体时,一些类型的控件(按钮、复选框、 下拉列表单、菜单)会发生一种“标准行 动”,从而随相应的Event对象发起对action() 的调用。比如对按钮来说,一旦按钮被按下, 而且没有再多按一次,就会调用它的action() 方法。这种行为通常正是我们所希望的,因 为这正是我们对一个按钮正常观感。但正如 本章后面要讲到的那样,还可通过 handleEvent()方法来处理其他许多类型的事件。
你定义的Listener可以继承Adapter类,而且只需重写你所需要的方 法。例如:实现每个Listener接口的所有方法的工作量是非常大 的,尤其是MouseListener接口和ComponentListener接口。 以MouseListener接口为例,它定义了如下方法: mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) 为了方便起见,Java语言提供了Adapters类,用来实现含有 多个方法的类。这些Adapters类中的方法是空的。 你可以继承Adapters类,而且只需重写你所需要的方法。
定义多重接口 implements MouseMotionListener, MouseListener 声明多个接口时,可以用逗号隔开。 监听多个源 f.addMouseListener(this); f.addMouseMotionListener(this);
事件Adapters(适配器)
Methods actionPerformed(Actio nEvent) itemStateChanged(Item Event) mouseDragged(MouseEve nt) mouseMoved(MouseEvent) mousePressed(MouseEve nt) mouseReleased(MouseEv ent) mouseEntered(MouseEve nt) mouseExited(MouseEven t) mouseClicked(MouseEve nt) keyPressed(KeyEvent)
捕获事件
public boolean action (Event evt, Object arg) { if(arg.equals("Button 1")) getAppletContext().showStatus("Button 1"); else if(arg.equals("Button 2")) getAppletContext().showStatus("Button 2"); // Let the base class handle it: else return super.action(evt, arg); return true; // We've handled it here }
AWT事件处理机制 AWT事件处理机制
Java事件
AWT事件处理机制
ActionEvent
button Frame
ActionPerformed(ActionEvent )
事件源
监听器
AWT事件处理机制
//: Button1.java // Putting buttons on an applet import java.awt.*; import java.applet.*; public class Button1 extends Applet { Button b1 = new Button("Button 1"), b2 = new Button("Button 2"); public void init() { add(b1); add(b2); } } ///:~
为了处理事件,你必须定义接收这个事件的组 件的子类,或者在基容器创建一个庞大的 handleEvent()方法。 委托事件模型是在JDK1.1中引入的。在这个模型中, 事件被送往产生这个事件的组件,然而,注册一个或 多个称为监听者的类取决于每一个组件,这些类包含 事件处理器,用来接收和处理这个事件。采用这种方 法,事件处理器可以安排在与源组件分离的对象中。 监听者就是实现了Listener接口的类。
委托模型(JDK1.1或更高版本)
优点 事件不会被意外地处理。 有可能创建并使用适配器 (adapter)类对 事件动作进行分类。 委托模型有利于把工作分布到各个类中。 缺点 不容易将JDK1.0代码移植到JDK1.1上。
Category Action Item Mouse motion
来自百度文库
Interface Name ActionListene r ItemListener MouseMotionLi stener