java事件处理

  • 格式:doc
  • 大小:121.00 KB
  • 文档页数:20

下载文档原格式

  / 20
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

教案首页(以2课时为单元)

事件处理

所谓事件,实际就是用户对程序的某一种功能性操作。自从JDK1.1以后,Java的事件处理模式都是以委托事件模式(Delegation Event Model)来处理用户所触发的事件。这就是说,当用户触发的事件不是我们想要的事件时,我们就不需要进行处理,这样就增加了系统的效率,整个事件处理结构也变得很清晰。

事件处理需要注意三个问题:第一是事件产生的来源(Source),也就是说什么组件要被处理。比如按钮Button被单击,则事件来源就是按钮;第二就是什么事件要被处理。一般来说事件是和组件相对应的,什么样的组件就会触发什么样的事件,而往往一个组件可能会触发多个事件,这就需要我们按具体情况进行设计。Java中的委托事件模式在此有要个规定,就是说需要对哪个组件进行事件处理,则必须给这个组件进行事件注册。一般来说这种注册很简单,基本都是用方法“addXXXListener”来注册,也就是给组件加上事件监听器。比如按钮组件就需要用addActionListener来进行注册;第三就是编写事件处理程序了,用户编程定义每个特定事件发生时程序应做出何种响应,并且这些响应代码会在对应的事件发生时由系统自动调用。比如按钮的事件处理我们都写在方法actionPerformed()中。

Java中的事件相关类基本都在java.awt.event包,它提供AWT事件所需的类和接口,我们把这些事件称为AWTEvent,并分为两大类:Low-level-Event和Semantic Event,前者指的是一些低层次的事件,后者指一些有意义的动作。为了使大家清楚AWTEvent事件结构

在此我们将以上事件类及其相关内容列表如下 AWT Event

事件编程的一般步骤:

1.实现某一事件的监听器接口(定义事件处理的类并实现事件的监听器接口)。

2.在事件处理类中重写(实现)其事件处理的函数体。

3.在创建AWT组件时注册事件处理代码以指定该事件的监听器(响应者)是谁。

本节我们主要介绍Low-level-Event,至于Semantic Event我们将在下节介绍。

一、WindowEvent

窗口的事件监听接口为WindowListener,其抽象方法有七个:表3 WindowEvent的方法

给窗口增加事件监听器addWindowListener(this)。用如下方法关闭窗口:

dispose(); System.exit(0);

【例】WindowEvent的示例。

import java.awt.*;

import java.awt.event.*;

class MyWindow implements WindowListener

{ //以下重写七个抽象类方法

public void windowOpened(WindowEvent e) {}

//我们只使用windowClosing方法

public void windowClosing(WindowEvent e) {

System.exit(0);

}

public void windowClosed(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowActivated(WindowEvent e) {}

public void windowDeactivated(WindowEvent e) {}

}

public class windowevent

{

public static void main(String args[])

{

Frame f=new Frame("WindowEvent测试");

f.setSize(400,300);

f.setBackground(Color.green);

f.setVisible(true);

//给我们的窗口加入监听器,注意参数是我们建立的事件处理类对象

f.addWindowListener(new MyWindow());

}

}

有同学可能会说七个方法还必须都写上,谁记得住呀,认真的同学可能还记得本章的例,在那个例子中我们并没有将七个方法都写出来,而是只重写了方法windowClosing。实际上Java开发者也发现了这个问题,所以就有了Adapter这个类,其实这个类也就是将所有相关的Listener 的抽象方法放在了一起,这样我们只需要在类中继承它就行了。

下面我们将类MyWindow重新来写:

class MyWindow extends WindowAdapter

{ //只重写需要的抽象类方法

public void windowClosing(WindowEvent e)

{ System.exit(0); }}

是不是很简单,但并不是所有的监听器Listener都有对应的Adapter类,请看下表:

表4 Listener对应的Adapter

二、 KeyEvent

KeyEvent是InputEvent类的一个子类,主要处理键盘事件。KeyListener接口中有三个方法: public void keyPressed(KeyEvent e) //按下键盘按键

public void keyReleased(KeyEvent e) //释放键盘按键

public void keyTyped(KeyEvent e) //按下一个可产生可见字符的按键

只要按下任意一个按键,前两个事件必然发生。 Java对于用户按键的处理过程:

当前键盘状态为小写状态,要输入一个大写字母“A”,我们的操作过程为:先按住Shift 键不放,再按下A键,然后松开。整个过程Java会产生五个事件:

按下Shift键:为VK_SHIFT调用keyPressed方法;

按下A键:为VK_A调用keyPressed方法;

键入字符“A”:为字符“A”调用keyTyped方法;

松开A键:为VK_A调用keyReleased方法;

松开Shift键:为VK_SHIFT调用keyReleased方法。

KeyEvent类中提供了几个重要的方法让我们来取得按键的数据,见下表:

相关主题