Java事件监听机制与观察者设计模式
一. 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事件监听机制与观察者设计模式的更多相关文章
- java事件监听机制
1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...
- java事件监听机制2
今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...
- JAVA事件监听机制的实现
今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- JAVA事件监听机制与实现
事件监听机制的实现:参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回调函数) 事件有许 ...
- java 事件监听机制组成
事件源(组件) 事件(Event) 监听器(Listener) 事件处理(引发事件后处理方式) 事件监听机制流程图 务必记牢: 确定事件源(容器或组件) 通过事件源对象的addXXXListener( ...
- java事件监听机制(自定义事件)
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
- 【转】java事件监听机制
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
随机推荐
- [转]C++ 使用Makefile文件
//*********list class.h**********class tdate {private:int month;int day;int year;public:tdate();tdat ...
- 2019 牛客多校第一场 C Euclidean Distance ?
题目链接:https://ac.nowcoder.com/acm/contest/881/C 题目大意 给定 m 和 n 个整数 ai,$-m \leq a_i \leq m$,求$\sum\limi ...
- sklearn 调用逻辑回归函数训练数据时出现 “unknown label type:unknown”
problemsolution:
- 顺时针打印矩阵元素(python实现)
我觉得我的算法比较简单易懂,比网上的那些简单些.至于时间复杂度就没有比较了. 算法思想:从最外层向内层遍历矩阵 # my algorithmimport math def print_matrix(m ...
- 【Java】Appache Flume 中文介绍
Flume 是什么 Apache Flume是一个高可靠.高可用的分布式的海量日志收集.聚合.传输系统.它能够从不同的日志源採集数据并集中存储. Flume也算是Hadoop生态系 ...
- Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义
原文 Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 缙哥哥发现用了雅黑的探针,在 Linux 的 CPU 状态信息中发现,有“%us.%sy.%ni. ...
- java oop第06章_异常处理
一. 异常的概念: 若程序都按我们事先设定的计划运行为正常执行,但通常会出现我们事先预料之外的其他情况,称为程序发生异常, 在java中会对一些可能出现异常的代码进行分类,达到尽量对可能发生的异常进行 ...
- JS函数 函数的作用,可以写一次代码,然后反复地重用这个代码。
什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(sum ...
- c结构体指针使用
#include <stdio.h> #include<stdlib.h> #include<string.h> typedef struct _Date { un ...
- K8S之部署Dashboard
转载声明 本文转载自:ASP.NET Core on K8S深入学习(2)部署过程解析与部署Dashboard 1.Yaml安装 下载yaml文件 wget https://raw.githubuse ...