Java基础知识每日总结(15)---Java事件处理

事件处理

1.事件处理基础
GUI事件处理机制是建立交互式应用程序的关键技术,其中事件是用户在程序界面上的各种操作,例如鼠标单击、双击、移动、键盘按下、抬起、关闭窗体、文本输入等操作。而各种事件的业务处理,由相应的监听器来完成,例如用户在窗体上单击鼠标,将会有指定的鼠标事件监听器来捕获这个操作,并做相应的业务处理。
每个控件都是java.awt.Component类的子类,它们都继承了Component类的方法,其中addKeyListener()方法用于向控件注册按键事件的监听器,当用户在控件上按下键盘上的按键时,将产生KeyEvent类型的事件对象,这个事件对象将被注册到控件上的监听器捕获,并有监听器指定的方法来处理。
任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件。所谓事件就是程序运行过程中可能发生的各种情况,例如窗体最小化、最大化、关闭、调整窗体大小、按下和放开键盘以及鼠标按钮等,这些都属于事件(Event),在Java中,所有的事件对象都最终派生于java.util.EventObject类。不同的事件源可以产生不同类别的事件。AWT事件处理机制概要:

  • 监听器对象是一个实现了特定监听器接口的类的实例;
  • 事件源是一个能够注册监听器对象并发送事件对象的对象;
  • 当事件发生时,事件源将事件对象传递给所有注册的监听器;
  • 监听器对象将利用事件对象中的信息决定如何对事件作出响应。

AWTEvent事件类的层次结构:
在这里插入图片描述
常用AWT事件类的功能及产生条件:
在这里插入图片描述
AwtEvent类继承于EventObject类,同时继承该类的还有很多事件类型。
事件监听器用于监听指定的事件类型,它们是Swing定义的不同的接口的实现对象。例如KeyListener接口是键盘按键事件KeyEvent的事件监听器接口,必须实现该接口编写自己的监听器实现类来处理事件,监听器类接收到事件之后,将委托指定的方法来执行事件处理。
各种类型的控件都可以产生不同的事件对象,这些事件对象由指定的监听器捕获,并调用指定事件类型的处理方法来处理事件。
有的事件监听器接口中定义了多个方法,在实现这样的监听器接口时就必须实现接口中的所有方法,例如KeyListener接口。
监听器创建:

ActionListener at1 =...;
JButton jb1 = new JButton("OK");
jb1.addActionListener(at1);

为了实现ActionListener接口,监听器类必须有一个被称为actionPerformed的方法,该方法接收一个ActionEvent对象参数。例,

class MyListener implements ActionListener {
	public void actionPerformed(ActionEvent event) {

	}
}

只要用户点击按钮,JButton对象就会创建一个ActionEvent对象,然后调用listener.actionPerformed方法传递事件对象。
直接使用接口需要实现接口中的全部方法,如果仅对其中某个方法感兴趣,则需要添加方法的空实现。解决该问题最好的办法就是使用适配器。
适配器是事件监听接口的实现类,它们实现了相应的事件监听器接口,并为接口中的所有方法定义了空的实现方法,即声明了接口中定义的所有方法,但是方法体是空的。在定义自己的事件监听器时,可以继承相应的适配器类,然后重写需要的事件方法即可。
由于适配器中提供的都是监听器接口定义方法的空实现,实例化适配器的实例对象没有任何意义,所以适配器被定义为abstract抽象类,但是其中的事件方法都不是抽象的。这样我们可以有选择的重写指定方法。

2.动作
通常要激活一个命令可以有多种方式。在AWT事件模型中实现这很容易:将所有事件连接到同一个监听器上。Swing包提供了一种机制来封装命令,并将它们连接到多个事件源,这就是Action接口,它扩展于ActionListener接口。
Action是一个接口,不是类。实现了这个接口的所有类都必须实现它内部的7个方法。有一个类实现了这个接口除actionPerformed方法之外的所有方法,它就是AbstractAction,这个类存储了所有的名/值对,并管理着属性变更监听器。可以直接扩展AbstractAction类,并在扩展类中实现actionPerformed方法。

3.常用事件
①窗体事件
执行System类的exit()方法退出当前Java程序和使用EXIT_ON_CLOSE方式通过关闭按钮关闭窗体是不一样的,后者只是关闭窗体,如果当前窗体是程序的一个模块,那么不会影响到程序的继续执行,而前者将退出整个程序。
②鼠标操作
鼠标事件监听器:
鼠标事件监听器由MouseListener接口和MouseMotionListener接口定义,它们分别定义了捕获不同的鼠标操作的方法。其中MouseListener接口中定义了5个方法:
在这里插入图片描述
MouseListener接口中的方法基本能够满足大多数应用程序的事件处理,MouseMotionListener接口中定义了两个有关鼠标移动与拖动事件的处理方法:
在这里插入图片描述
鼠标事件处理:
两个鼠标事件监听器中的方法都定义了MouseEvent类型的形参,MouseEvent类是鼠标事件类,是被监听器捕获的用户操作所生成的事件对象,该实例对象包含了许多鼠标事件发生时的参数信息,例如鼠标的坐标位置、鼠标的按键等。这些属性可以通过相应的访问器方法获取,鼠标事件的常用方法:
在这里插入图片描述
③键盘控制
键盘事件监听器:
键盘事件监听器由KeyListener接口定义,编写键盘事件监听器必须实现该接口中的3个方法,这3个方法分别处理不同的按键事件:
在这里插入图片描述
对应与键盘事件监听器的适配器是KeyAdapter类,可以继承该类,然后重写需要的单个方法。如果需要处理所有键盘事件的监听,那么干脆实现KeyListener接口,总之需要根据程序需求,选择实现KeyListener接口或是继承KeyAdapter抽象类。
键盘事件处理:
键盘事件监听器中的每个事件处理方法都接收KeyEvent类型的按键事件对象,这个按键事件是用户在控件上的按键动作促使程序产生的,键盘事件监听器将捕获该事件,并根据不同的按键动作,委托不同的事件处理方法去处理该事件,按键事件对象保存了用户按键时的相关属性,例如按键的代码、按键对应的字符、按键的名称等,这些属性可以通过相应的属性设置器与属性获取器方法实现:
在这里插入图片描述
除了按键事件常用的方法之外,KeyEvent类还定义了按键常量,这些常量分别对应着按键的键值,常量名称以“VK_”为前缀,例如VK_A常量代表按键A,它的键值是65,常用的常量:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值