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. 命令交互方式 图书管理系统 ...
随机推荐
- 10.RabbitMQ Fanout类型交换机
Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上. Producer.java package com.test.fanout; import co ...
- 用注册表创建无法删除的IE快捷方式
代码如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{98745625-1234 ...
- PAT_A1099#Build A Binary Search Tree
Source: PAT A1099 Build A Binary Search Tree (30 分) Description: A Binary Search Tree (BST) is recur ...
- luogu3384 /// 树链剖分+线段树模板
题目大意: https://www.luogu.org/problemnew/show/P3384 树链剖分的讲解 两个dfs() 修改 查询 很详细很好理解 https://www.cnblogs. ...
- LeetCode 67. Add Binary【个位补0,不必对齐】【easy】
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- Docker学习の更改Docker的目录
一.更改虚拟磁盘的目录 虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好 ...
- 2018-12-22-WPF-在绑定表达式添加计算
title author date CreateTime categories WPF 在绑定表达式添加计算 lindexi 2018-12-22 16:12:56 +0800 2018-12-22 ...
- .Net Core JWT Bearer 的认证
关于JWT原理在这不多说,主要由三部分组成:Header.Payload.Signature,有兴趣自己上网了解. 1.首先创建.Net Core 一个Api项目 2.添加 JWT 配置 2.1 修改 ...
- elast数据存放
这几天一直在索引数据,突然发现服务器状态变红色了,去官网看了下 集群状态如果是红色的话表示有数据已经丢失了!这下头大了才索引了7G数据,后面还有10多个G, 我在liunx下看了下磁盘空间 发现运行e ...
- Java中怎样实现字符串截取
使用substring()对字符串进行截取: /** * str.indexOf()查找下标 * substring();//字符串截取 * length();//字符串长度 * */ @Test p ...