Java中的事件处理机制详解

 更新时间:2023年09月21日 08:56:09   作者:Neo丶  
这篇文章主要介绍了Java中的事件处理机制详解,Java事件处理是采取"委派事件模型",当事件发生时,产生事件的对象,会把此"信息"传递给"事件的监听者"处理,这里所说的"信息"实际上就是java.awt.event事件类库里某个类创建对象,需要的朋友可以参考下

基本介绍

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事件处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 实现文件编码检测的几种方式汇总

    java 实现文件编码检测的几种方式汇总

    在实际开发中,我们常常涉及某些场景需要对文件的读取,但是因为不知道具体的编码格式,导致读取到的文件内容乱码,因此在读取文件内容之前,需要解析获取文件的编码,这样读取的内容就不会出现乱码了,下面是常见的几种获取文件编码的方式,感兴趣的朋友一起看看吧
    2025-09-09
  • Spring中@Lazy注解的使用技巧与实例解析

    Spring中@Lazy注解的使用技巧与实例解析

    @Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将Bean的初始化延迟到第一次使用时,可以减少不必要的资源消耗,本文介绍Spring中@Lazy注解的使用技巧与实例解析,感兴趣的朋友一起看看吧
    2025-03-03
  • Spring基于XML实现Aop

    Spring基于XML实现Aop

    这篇文章主要介绍了Spring中基于xml的AOP的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    这篇文章主要介绍了SpringBoot整合MyBatis实现乐观锁和悲观锁的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • spring batch使用reader读数据的内存容量问题详解

    spring batch使用reader读数据的内存容量问题详解

    这篇文章主要介绍了spring batch使用reader读数据的内存容量问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java 继承与多态超详细梳理

    Java 继承与多态超详细梳理

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2022-04-04
  • Java Stream reduce()使用指南

    Java Stream reduce()使用指南

    reduce()是Java Stream API中的一个重要终端操作,用于将流中的元素通过二元运算符结合起来,生成单一结果,它主要用于计算总和、乘积、最大值、最小值和字符串连接等,本文给大家介绍Java Stream reduce(),感兴趣的朋友一起看看吧
    2024-10-10
  • SpringMVC中controller返回json数据的方法

    SpringMVC中controller返回json数据的方法

    这篇文章主要为大家详细介绍了SpringMVC中controller返回json数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • mybatis中的一级缓存深入剖析

    mybatis中的一级缓存深入剖析

    这篇文章主要介绍了mybatis中的一级缓存深入剖析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Mybatis 简介与原理

    Mybatis 简介与原理

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
    2017-05-05

最新评论