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

相关文章

  • Seata AT模式前后镜像是如何生成详解

    Seata AT模式前后镜像是如何生成详解

    这篇文章主要为大家介绍了Seata AT模式前后镜像是如何生成的方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • MyBatis逆向工程基本操作及代码实例

    MyBatis逆向工程基本操作及代码实例

    这篇文章主要介绍了MyBatis逆向工程基本操作及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Netty分布式ByteBuf使用directArena分配缓冲区过程解析

    Netty分布式ByteBuf使用directArena分配缓冲区过程解析

    这篇文章主要介绍了Netty分布式ByteBuf使用directArena分配缓冲区过程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Spring Cache + Caffeine的整合与使用示例详解

    Spring Cache + Caffeine的整合与使用示例详解

    对于一些项目里需要对数据库里的某些数据一直重复请求的,且这些数据基本是固定的,在这种情况下,可以借助简单使用本地缓存来缓存这些数据,本文介绍一下Spring Cache和Caffeine的使用,感兴趣的朋友一起看看吧
    2023-12-12
  • java中synchronized锁的升级过程

    java中synchronized锁的升级过程

    这篇文章主要介绍了java中synchronized锁的升级过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 关于web项目读取classpath下面文件的心得分享

    关于web项目读取classpath下面文件的心得分享

    这篇文章主要介绍了关于web项目读取classpath下面文件的心得,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Springboot无法注入service问题

    Springboot无法注入service问题

    这篇文章主要介绍了Springboot无法注入service的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 详解Java中StringBuffer类常用方法

    详解Java中StringBuffer类常用方法

    这篇文章主要为大家介绍了java中StringBuffer类常用方法
    2016-01-01
  • ElasticSearch启动成功却无法在浏览器访问问题解决办法

    ElasticSearch启动成功却无法在浏览器访问问题解决办法

    因工作的需要,要使用elasticsearch,安装完了,启动也成功了之后发现了问题,这篇文章主要给大家介绍了关于ElasticSearch启动成功却无法在浏览器访问问题的解决办法,需要的朋友可以参考下
    2024-10-10
  • log4j如何根据变量动态生成文件名

    log4j如何根据变量动态生成文件名

    这篇文章主要介绍了log4j如何根据变量动态生成文件名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论