java事件处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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类中提供了几个重要的方法让我们来取得按键的数据,见下表: