一. 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. AtCoder ARC061E Snuke's Subway Trip 最短路

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:传送门  Portal  原题目描述在最下面.  \(n(1 ...

  2. HDU5923-Prediction-有继承味道的并查集

    目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门  原题目描述在最下面.  有一个n个节点m条边的无向图和一个m个节点的有根树(根为1).树上每 ...

  3. 微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate

    ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate 1.返回顶部 1. templateMessage.deleteTemplate ...

  4. sql语句中----删除表数据drop、truncate和delete的用法(转)

    转载于:http://www.cr173.com/html/40708_1.html 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟 ...

  5. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  6. sql基础学习

    学习参考网站:http://www.runoob.com/sql/sql-tutorial.html 一.SQL命令 1.SELECT 语句 用于从数据库中选取数据. select column_na ...

  7. HDU-1754-I Hate It-线段树-求区间最值和单点修改

    开学新拉的题目,老题重做,思路会稍微比之前清晰,不过这也算是一点点进步了. 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现 ...

  8. 什么是css块级元素和内联元素

    CSS文档流与块级元素(block).内联元素(inline),文档流这个概念理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 文档流 将窗体自上而下分成一行行, ...

  9. mysql中重复数据只取条

    select * from table_a where id in (select min(id) from table_a group by a) )) SUBSTRING_INDEX(cids,' ...

  10. shell 命令 用户管理

     1. 查看保存用户相关信息的文件 [ cat /etc/passwd ]  [linux    :    x    :   1000  :   1000   :   linux,,,   :    ...