一. Java事件监听机制

1. 事件监听三要素: 事件源,事件对象,事件监听器

2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对象传递进去,开发者可以利用事件对象操作事件源。

3. 入门程序

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/8/29 21:25
* @Title: 事件监听入门程序
* @Description:
*/
public class Demo1 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setSize(400, 500);
frame.setVisible(true);
// 为frame注册一个事件监听器
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) { } @Override
public void windowClosing(WindowEvent e) {
System.out.println("再会~~~");
// 通过事件对象获取事件源
Frame frame = (Frame) e.getSource();
// 关闭窗口
frame.dispose();
} @Override
public void windowClosed(WindowEvent e) { } @Override
public void windowIconified(WindowEvent e) { } @Override
public void windowDeiconified(WindowEvent e) { } @Override
public void windowActivated(WindowEvent e) { } @Override
public void windowDeactivated(WindowEvent e) { }
});
}
}

二. 设计一个能够被其它类监听的类(如何实现监听机制)

其实就是观察者模式

1. 事件源

 // 事件源
class Door { private DoorListener doorListener; public void addDoorListener(DoorListener doorListener) {
this.doorListener = doorListener;
} public void open() {
if (doorListener != null) {
doorListener.doOpen(new DoorEvent(this));
}
System.out.println("门打开了。。。");
} public void close() {
if (doorListener != null) {
doorListener.doClose(new DoorEvent(this));
}
System.out.println("门关上了。。。");
}
}

2. 事件监听器

 // 监听器
interface DoorListener {
public void doOpen(DoorEvent doorEvent);
public void doClose(DoorEvent doorEvent);
}

3. 事件对象

 // 事件对象
class DoorEvent {
// source
private Door door;
public DoorEvent() {}
public DoorEvent(Door door) {
this.door = door;
} public Door getDoor() {
return door;
} public void setDoor(Door door) {
this.door = door;
}
}

4. 测试

 public class Demo2 {

     public static void main(String[] args) {
// 门
Door door = new Door();
// 注册监听器
door.addDoorListener(new DoorListener() {
@Override
public void doOpen(DoorEvent doorEvent) {
System.out.println(doorEvent + " bomb~~~");
} @Override
public void doClose(DoorEvent doorEvent) {
System.out.println(doorEvent + " bomb2~~~");
}
});
door.open();
door.close();
}
}

完整代码:

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/8/29 21:45
* @Title: 观察者设计模式
* @Description:
*/
public class Demo2 { public static void main(String[] args) {
// 门
Door door = new Door();
// 注册监听器
door.addDoorListener(new DoorListener() {
@Override
public void doOpen(DoorEvent doorEvent) {
System.out.println(doorEvent + " bomb~~~");
} @Override
public void doClose(DoorEvent doorEvent) {
System.out.println(doorEvent + " bomb2~~~");
}
});
door.open();
door.close();
}
} // 事件源
class Door { private DoorListener doorListener; public void addDoorListener(DoorListener doorListener) {
this.doorListener = doorListener;
} public void open() {
if (doorListener != null) {
doorListener.doOpen(new DoorEvent(this));
}
System.out.println("门打开了。。。");
} public void close() {
if (doorListener != null) {
doorListener.doClose(new DoorEvent(this));
}
System.out.println("门关上了。。。");
}
} // 监听器
interface DoorListener {
public void doOpen(DoorEvent doorEvent);
public void doClose(DoorEvent doorEvent);
} // 事件对象
class DoorEvent {
// source
private Door door;
public DoorEvent() {}
public DoorEvent(Door door) {
this.door = door;
} public Door getDoor() {
return door;
} public void setDoor(Door door) {
this.door = door;
}
}

Java事件监听机制与观察者设计模式的更多相关文章

  1. java事件监听机制

    1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...

  2. java事件监听机制2

    今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...

  3. JAVA事件监听机制的实现

    今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...

  4. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  5. JAVA事件监听机制与实现

    事件监听机制的实现:参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回调函数) 事件有许 ...

  6. java 事件监听机制组成

    事件源(组件) 事件(Event) 监听器(Listener) 事件处理(引发事件后处理方式) 事件监听机制流程图 务必记牢: 确定事件源(容器或组件) 通过事件源对象的addXXXListener( ...

  7. java事件监听机制(自定义事件)

    java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...

  8. 【转】java事件监听机制

    java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...

  9. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

随机推荐

  1. PostgreSQL/GREENPLUM关联更新

    update a_t AA set /*AA.*/ sqlstr = 'qqq' from a_t BB where aa.id <> BB.id and aa.name = BB.nam ...

  2. Openstack nova-scheduler 源码分析 — Filters/Weighting

    目录 目录 前言 调度器 FilterScheduler调度器的工作流程 Filters 过滤器 Filters 类型 Weighting 权重 源码实现 关键文件及其意义 阶段一nova-sched ...

  3. Maven详解()-- 常用命令

    Maven常用命令: Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ 一,Maven常用命令: ...

  4. Java 中的 SPI 机制是什么鬼?高级 Java 必须掌握!

    作者:sigangjun blog.csdn.net/sigangjun/article/details/79071850 SPI的全名为:Service Provider Interface,大多数 ...

  5. Southeastern European Regional Programming Contest 2019

    easy: I medium-easy: BDEGJ medium: F medium-hard: A A. B. 按 x 排序,\(dp[i][j][k]\) 表示考虑前 \(i\) 个物品,lev ...

  6. linux下使用自带mail发送邮件

    linux下使用自带mail发送邮件 mailx工具说明: linux可以通过安装mailx工具,mailx是一个小型的邮件发送程序,一般可以通过该程序在linux系统上,进行监控linux系统状态并 ...

  7. VisualGDB使用随笔

    VisualGDB是目前我遇到的在Windows下开发Linux应用程序最好用的软件,它不仅可以直接在VS环境中编译Linux程序,还可以直接对Linux程序进行调试,极大的方便了Windows程序员 ...

  8. 前端常用的库和实用技术之JavaScript面向切面编程

    Aspect Oriented Programming(AOP)面向切面编程是一个比较热门的话题. AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程 中的某个步骤或阶段,以 ...

  9. 查看ubuntu系统的版本信息

    显示如下 Linux version 4.10.0-28-generic (buildd@lgw01-12) linux内核版本号 gcc version 5.4.0 20160609 gcc编译器版 ...

  10. 校园商铺-2Logback配置与使用-2Logback配置

    logback配置文件加载顺序 logback:程序在运行的时候,会按照一定的顺序去加载logbook相关的配置文件. 如果我们在配置里面制定了logbackConfigurationFile这个属性 ...