详解Java事件处理机制

以键盘事件为例详解事件处理

详解Java事件处理机制

初步介绍

Java 事件处理是采取 “委派事件模型”。所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给 “事件监听者” 处理的一种方式,而这里所说的“信息”实际上就是 “java.awt.event” 事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”

是不是有点抽象,用图来表示就是:

我们用一个实例来讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package JavaEventListener;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyEventListener extends JFrame{
MyPanel myPanel = null;
public MyEventListener() {

myPanel = new MyPanel();
this.add(myPanel);
this.setSize(200,150);
this.setVisible(true);
this.addKeyListener(myPanel);
}

public static void main(String[] args) {

MyEventListener eListener = new MyEventListener();
}

}
class MyPanel extends JPanel implements KeyListener{
int x,y;
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, y, 20, 20);
}
@Override
public void keyTyped(KeyEvent e) {


}

@Override
public void keyPressed(KeyEvent e) {

switch(e.getKeyCode()) {
case KeyEvent.VK_UP:
y--;
break;
case KeyEvent.VK_DOWN:
y++;
break;
case KeyEvent.VK_LEFT:
x--;
break;
case KeyEvent.VK_RIGHT:
x++;
break;
}
this.repaint();
}

@Override
public void keyReleased(KeyEvent e) {


}

}

这个实例是基于swing的,实例中通过KeyListener来监听键盘事件,从而达到可以使用上下左右键控制小球移动的目的

在这个实例中

事件源是键盘

事件是键盘被按下(释放)

事件监听者是MyPanel对象–>第18行

事件处理方法则是KeyListener中的一系列方法(keyPressed…)–>34行起

这也体现了上面提到的委派事件模型


深入理解

① 事件源

事件源是一个产生或触发事件的对象,如按钮对象,窗口对象等。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)比如一个窗口可以被最小化,最大化,这就是不同类型的事件。

② 事件

事件就是承载事件源状态改变时的信息对象。也可以说事件是事件源向事件监听器传输事件源状态信息的载体。在用户与GUI组件进行交互时就会生成事件,如鼠标移动,窗口大小改变,键盘按下等。在java.awt.event 和javax.swing.event包中定义了各种事件的类型。具体在此不多赘述,请自行查阅jdk文档。

③ 事件监听者

事件监听者实际上是一个类,该类实现了某个事件监听器接口。如上文提到的MyPanel类就作为事件监听者,实现了KeyListener接口,它可以对接收到的事件进行处理

④ 事件监听器接口

事件监听器接口有很多,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口就比如上文代码中,我实现了KeyListener,也可以同时实现MouseListener等多个接口。实现后只需要在前面用this.add()注册即可。

小结

Java事件监听编写步骤:

1.编写事件处理类

2.给事件处理类实现监听器接口

3.在事件处理类中重写(@Override)其事件处理函数

4.在事件源类中制定该事件的监听器,也就是注册监听(this.add();)

废话时间

为什么要写这篇Blog呢?

这是我高中毕业后写的第一篇文章,顺便重温一下前面Java学习的知识点。

转载请注明出处->Yeliheng的技术小站 谢谢!