Java中的事件处理机制详解
作者:Neo丶
基本介绍
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...
到此这篇关于Java中的事件处理机制详解的文章就介绍到这了,更多相关Java事件处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!