1、定义一个 ValueChangedEvent

ValueChangedEvent用于在设置属性值的时候,触发事件。

package org.teamlet;

import java.util.EventObject;

public class ValueChangeEvent extends EventObject {

/**

*

*/

private static final long serialVersionUID = 767352958358520268L;

private int value;

public ValueChangeEvent(Object source) {

this(source, 0);

}

public ValueChangeEvent(Object source, int newValue) {

super(source);

value = newValue;

}

public int getValue() {

return value;

}

}

2、定义监听接口 ValueChangeListener

ValueChangeListener 提供属性值变化的接口。

package org.teamlet;

public interface ValueChangeListener extends java.util.EventListener {

public abstract void performed(ValueChangeEvent e);

}

3、事件的产生者

EventProducer提供了监听容器listenerRegister,负责消费者的注册。

package org.teamlet;

public class EventProducer {

ListenerRegister register = new ListenerRegister();

private int value;

public int getValue() {

return value;

}

public void setValue(int newValue) {

if (value != newValue) {

value = newValue;

ValueChangeEvent event = new ValueChangeEvent(this, value);

fireAEvent(event);

}

}

public void addListener(ValueChangeListener a) {

register.addListener(a);

}

public void removeListener(ValueChangeListener a) {

register.removeListener(a);

}

public void fireAEvent(ValueChangeEvent event) {

register.fireAEvent(event);

}

}

4、注册器

ListenerRegister负责注册和分发事件。

package org.teamlet;

import java.util.Vector;

public class ListenerRegister {

private Vector listeners = new Vector();

public synchronized void addListener(ValueChangeListener a) {

listeners.addElement(a);

}

public synchronized void removeListener(ValueChangeListener a) {

listeners.removeElement(a);

}

@SuppressWarnings("unchecked")

public void fireAEvent(ValueChangeEvent evt) {

Vector currentListeners = null;

synchronized (this) {

currentListeners = (Vector) listeners.clone();

}

for (int i = 0; i < currentListeners.size(); i++) {

ValueChangeListener listener = (ValueChangeListener) currentListeners

.elementAt(i);

listener.performed(evt);

}

}

}

5、事件的消费者

EventConsumer实现ValueChangedListener,当EventProducer 发送事件时,接收事件。

package org.teamlet;

public class EventConsumer implements ValueChangeListener {

@Override

public void performed(ValueChangeEvent e) {

System.out.println("value changed, new value = " + e.getValue());

}

}

6、使用

package org.teamlet;

public class Main {

public static void main(String[] args) {

EventProducer producer = new EventProducer();

producer.addListener(new EventConsumer());

producer.setValue(2);

}

}

---------------------

作者:teamlet

来源:CSDN

原文:https://blog.csdn.net/teamlet/article/details/42618733

版权声明:本文为博主原创文章,转载请附上博文链接!

java属性监听_Java event事件监听属性值变化 demo相关推荐

  1. java按钮点击事件监听_按钮事件监听

    [java]代码库/** * 功能:按钮事件监听 */ package com.test; import java.awt.*; import javax.swing.*; import java.a ...

  2. java 文本框输入监听事件_JAVA GUI 事件监听事件 详解 和 案例.

    GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...

  3. java事件监听机制pdf,事件监听机制(转)

    事件监听机制在java编程中有很重要的应用,一般我们在处理GUI编程时,只是重写一下监听接口的perform函数即可.但事件监听在底层是如何运行的?通过下面的例子我们可以有个清楚地了解. 1.     ...

  4. Java语言学习--Swing中Button事件监听

    1 前言 今天在使用Java Swing中的JButton的事件触发机制时遇到了许多问题,简单的了解了一下. 2 事件监听机制 事件监听的机制如下图所示分析. 3 代码分析 3.1 分步解析 1.事件 ...

  5. layui监听当前页_事件监听 · layui使用手册 · 看云

    # 事件监听 语法:form.on('event(过滤器值)', callback); form模块在 layui 事件机制中注册了专属事件,所以当你使用layui.onevent()自定义模块事件时 ...

  6. java swing鼠标事件监听_java swing鼠标监听问题

    需要对一个JButton b添加一个监听事件达到创建一个自定义的Position(x,y)的对象: 监听类NewListen中需要用到鼠标在面板上点击取坐标值来完成创建一个Position(x,y)的 ...

  7. java鼠标监听事件_JAVA 鼠标事件监听ACTIONLISTENER

    当鼠标点击和放开时发生动作事件: 方法摘要: actionPerformed(ActionEvent e) 发生操作时调用. 列:public class shijian extends Frame ...

  8. java鼠标监听事件方法_java 鼠标事件监听ActionListener

    当鼠标点击和放开时发生动作事件: 方法摘要: 列: public class shijian extends Frame { public static void main(String[] args ...

  9. java服务端监听_Java客户端正在监听WebSphere MQ服务器?

    我需要编写一个监听WebSphere MQ服务器的Java客户机.消息放入服务器的队列中.Java客户端正在监听WebSphere MQ服务器? 我开发了这个代码,但我不确定它是否正确.如果正确,那我 ...

最新文章

  1. SD-WAN技术分析—Vecloud
  2. 16.1 Tomcat介绍16.2 安装jdk16.3 安装Tomcat
  3. Cannot send session cache limiter - headers already sent问题
  4. [react] 举例说明useState
  5. *p++,*(p++),(*p)++的区别
  6. 寄存器地址和内存地址_3. 从0开始学ARMARM模式、寄存器、流水线
  7. 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描
  8. java时间往后一天_如何在Java中将日期增加一天?
  9. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
  10. visual studio插件开发dll类库免加全局缓存处理办法
  11. 一键刷入twrp_小米红米如何正确TWRP卡刷MIUI12波兰版或者欧版等系统详细教程
  12. 视频编码格式——h264优点
  13. 层次时间序列预测指南
  14. 在mtk6223的软t卡上实现对sdhc卡的读写
  15. 使用lanyu的激活码,报错1653219,解决办法
  16. 优美库图片小程序 Version1.0
  17. TCP/IP多路复用
  18. 如何接入量化交易接口api进行交易?
  19. Oracle 创建用户详解(create user)
  20. c#—MemoryStream读图片存入ImageList

热门文章

  1. 直播 | ACL 2021论文解读:提升预训练语言模型实体与关系理解的统一框架
  2. 做 NLP 算法研究,去大公司还是创业公司?
  3. ICLR 2021 | 美团、上交大等:鲁棒的可微分神经网络搜索DARTS-
  4. ​KDD 2020 开源论文 | 图神经网络多变量时序预测
  5. CVPR 2020 开源论文 | 多种可能性行人未来路径预测
  6. 一文带你看懂PaddleHub
  7. 深度 | 用代码构建机器心智,我们离这个目标还有多远?
  8. 2017年度最值得读的AI论文评选 | 大张旗鼓送福利
  9. html中js添加或删除activex,JS:操作样式表2 :用JS实现添加和删除一个类名的功能(addClass()和removeClass())...
  10. python 主语_前深度学习时代--FFM模型的原理与Python实现