基本介绍
Java事件处理是采取"委派事件模型"。当事件发生时,产生事件的对象,会把此"信息"传递给"事件的监听者"处理,这里所说的"信息"实际上就是java.awt.event事件类库里某个类创建对象,把它称为"事件的对象"。
测试代码
package com.pero.event_;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 事件控制
*
* @author Pero
* @version 1.0
*/
public class BallMove extends JFrame{
MyPanel myPanel = null;
public static void main(String[] args) {
new BallMove();
}
public BallMove(){
myPanel = new MyPanel();
this.add(myPanel);
this.setSize(800,560);
//窗口JFrame对象可以监听键盘事件,即可以监听到面板发生的键盘事件
this.addKeyListener(myPanel); //添加监听器到面框窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//面板,画出小球
//KeyListener是监听器可以监听键盘事件
//继承键盘监听接口,并实现其三个方法
class MyPanel extends JPanel implements KeyListener { //①当产生键盘事件的时候被KeyListener监听到
//③MyPanel类实现了KeyListener接口,那么它就是一个事件监听者,对事件进行处理(通过方法)
int x = 10;
int y = 10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0,0,800,560);
g.setColor(Color.yellow);
g.fillOval(x,y,20,20);
}
//有字符输出会被监听,该方法就会被触发
@Override
public void keyTyped(KeyEvent e) { //处理事件的方法
}
//当某个键被按下,该方法会被触发
@Override
public void keyPressed(KeyEvent e) { //②产生KeyEvent对象e事件对象
//根据用户按下的不同键,处理小球的移动(上下左右键)
//java中会给键盘的每一个键给一个值
if (e.getKeyCode() == KeyEvent.VK_DOWN){
y++;
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
y--;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x--;
} else if (e.getKeyCode() ==KeyEvent.VK_RIGHT) {
x++;
}
//让面板重绘,除法paint方法,刷新画面
this.repaint();
}
//当某个键被释放,该方法会被触发
@Override
public void keyReleased(KeyEvent e) { //处理事件的方法
}
}
深入理解
1)事件源:事件源是一个产生事件的对象,比如按钮和窗口;
2)事件:事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,会生成一个事件对象,对该对象保存着当前事件很多信息,比如KeyEvent对象含有被按下的Code值。java.awt.event包和javax.swing.event包中定义了各种事件类型。
3)事件类型:
事件类 | 说明 |
ActionEvent | 通常在按下按钮,或双击一个列表项,或选中某个菜单时发生 |
AdjustmentEvent | 当操作一个滚动条时发生 |
ComponentEvent | 当一个组件,隐藏、移动、改变大小时发生 |
ContainerEvent | 当一个组件从容器中加入或者删除时发生 |
ItemEvent | 当一个复选框或是列表项被选中时,当一个选择框或者选择菜单被选中时发生 |
KeyEvent | 当从键盘的案件被按下、松开时发生 |
MouseEvent | 当鼠标被拖动、移动、点击、按下时发生 |
TextEvent | 当文本区和文本域的文本变化时发生 |
WindowEvent | 当一个窗口激活、关闭、失效、恢复、最小化...时发生 |
FocusEvent | 当一个组件获得或者失去焦点时发生 |
4)事件监听器接口:
①当事件源产生一个事件,可以传递给事件监听者处理;
②事件监听者实际上就是一个类,该类实现了某个事件监听器接口,案例中的MyPanel类就是一个事件监听者,它实现了KeyListener接口,它就作为一个事件监听者,对接收到的事件进行处理;
③事件监听器接口有多种,不同事件监听器接口可以监听不同事件,一个类可以实现多个监听器接口;
④这些接口在java.awt.event包和java.swing.event包中定义。接口有:ActionListener、AdjustmentListener、AWTEventListener、ComponentListener、ContainerListener、FocusListener、HierarchyBoundsListener、HierarchyListener、InputMethodListener、ItemListener、KeyListener、MouseListener、MouseMotionListener、MouseWheelListener、TextListener、WindowFocusListener、WindowListener、WindowStateListener...