温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java事件和监听器关系

发布时间:2026-09-15 20:29:47 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,**事件(Event)监听器(Listener)是一种典型的观察者模式(Observer Pattern)**实现,常用于处理用户交互、组件通信和异步通知。

下面从概念、关系、工作流程、代码示例四个方面说明。


一、核心概念

1. 事件(Event)

  • 表示“发生了某件事情”
  • 通常是一个对象,继承自 java.util.EventObject
  • 包含事件源(谁触发的)和事件相关信息
public class MyEvent extends EventObject {
    public MyEvent(Object source) {
        super(source);
    }
}

2. 监听器(Listener)

  • 用于“监听事件是否发生”
  • 是一个接口,定义处理事件的方法
  • 事件发生时,系统会调用监听器的方法
public interface MyListener {
    void onEvent(MyEvent e);
}

3. 事件源(Event Source)

  • 产生事件的对象
  • 负责:
    • 注册监听器
    • 触发事件

二、事件与监听器的关系

关系一句话总结:

监听器监听事件,事件源触发事件,事件被监听器处理

结构关系:

事件源 (Source)
   |
   | 注册
   v
监听器 (Listener)
   |
   | 触发
   v
事件 (Event)

三、典型工作流程

  1. 定义事件类(继承 EventObject)
  2. 定义监听器接口(含处理方法)
  3. 事件源
    • 提供 addListener() 方法
    • 在条件满足时创建事件并通知监听器
  4. 使用时
    • 创建监听器
    • 注册到事件源
    • 等待事件触发

四、完整示例(自定义事件)

1. 事件类

import java.util.EventObject;

public class ButtonClickEvent extends EventObject {
    public ButtonClickEvent(Object source) {
        super(source);
    }
}

2. 监听器接口

public interface ButtonClickListener {
    void onClick(ButtonClickEvent e);
}

3. 事件源

import java.util.ArrayList;
import java.util.List;

public class Button {
    private List<ButtonClickListener> listeners = new ArrayList<>();

    public void addClickListener(ButtonClickListener l) {
        listeners.add(l);
    }

    public void click() {
        ButtonClickEvent event = new ButtonClickEvent(this);
        for (ButtonClickListener l : listeners) {
            l.onClick(event);
        }
    }
}

4. 使用

public class Test {
    public static void main(String[] args) {
        Button button = new Button();

        button.addClickListener(e -> {
            System.out.println("按钮被点击了!");
        });

        button.click(); // 触发事件
    }
}

五、Java 中常见内置示例

GUI(Swing)

button.addActionListener(e -> {
    System.out.println("按钮点击");
});
  • 事件:ActionEvent
  • 监听器:ActionListener

Spring 框架

@EventListener
public void handleEvent(MyEvent event) {
}

六、总结对比

角色 作用
事件 描述“发生了什么”
监听器 定义“怎么处理”
事件源 决定“何时触发”

如果你愿意,我也可以:

  • UML 图解释
  • 对比 回调(Callback)
  • Spring 事件机制
  • 或结合 Swing / JavaFX 实例

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI