本文实例讲述了Java使用自定义注解实现为事件源绑定事件监听器操作。分享给大家供大家参考,具体如下:

一 定义注解

import java.lang.annotation.*;

import java.awt.event.*;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface ActionListenerFor

{

// 定义一个成员变量,用于设置元数据

// 该listener成员变量用于保存监听器实现类

Class extends ActionListener> listener();

}

二 注解处理程序

import java.lang.reflect.*;

import java.awt.event.*;

import javax.swing.*;

public class ActionListenerInstaller

{

// 处理Annotation的方法,其中obj是包含Annotation的对象

public static void processAnnotations(Object obj)

{

try

{

// 获取obj对象的类

Class cl = obj.getClass();

// 获取指定obj对象的所有成员变量,并遍历每个成员变量

for (Field f : cl.getDeclaredFields())

{

// 将该成员变量设置成可自由访问。

f.setAccessible(true);

// 获取该成员变量上ActionListenerFor类型的Annotation

ActionListenerFor a = f.getAnnotation(ActionListenerFor.class);

// 获取成员变量f的值

Object fObj = f.get(obj);

// 如果f是AbstractButton的实例,且a不为null

if (a != null && fObj != null

&& fObj instanceof AbstractButton)

{

// 获取a注解里的listner元数据(它是一个监听器类)

Class extends ActionListener> listenerClazz = a.listener();

// 使用反射来创建listner类的对象

ActionListener al = listenerClazz.newInstance();

AbstractButton ab = (AbstractButton)fObj;

// 为ab按钮添加事件监听器

ab.addActionListener(al);

}

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

三 测试注解程序

import java.awt.event.*;

import javax.swing.*;

public class AnnotationTest

{

private JFrame mainWin = new JFrame("使用注解绑定事件监听器");

// 使用Annotation为ok按钮绑定事件监听器

@ActionListenerFor(listener=OkListener.class)

private JButton ok = new JButton("确定");

// 使用Annotation为cancel按钮绑定事件监听器

@ActionListenerFor(listener=CancelListener.class)

private JButton cancel = new JButton("取消");

public void init()

{

// 初始化界面的方法

JPanel jp = new JPanel();

jp.add(ok);

jp.add(cancel);

mainWin.add(jp);

ActionListenerInstaller.processAnnotations(this); // ①

mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainWin.pack();

mainWin.setVisible(true);

}

public static void main(String[] args)

{

new AnnotationTest().init();

}

}

// 定义ok按钮的事件监听器实现类

class OkListener implements ActionListener

{

public void actionPerformed(ActionEvent evt)

{

JOptionPane.showMessageDialog(null , "单击了确认按钮");

}

}

// 定义cancel按钮的事件监听器实现类

class CancelListener implements ActionListener

{

public void actionPerformed(ActionEvent evt)

{

JOptionPane.showMessageDialog(null , "单击了取消按钮");

}

}

四 运行

希望本文所述对大家java程序设计有所帮助。

java自定义监听器例子_Java使用自定义注解实现为事件源绑定事件监听器操作示例...相关推荐

  1. java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例

    本文实例讲述了java实现二叉树的建立.计算高度与递归输出操作.分享给大家供大家参考,具体如下: 1. 建立 递归输出 计算高度 前中后三种非递归输出 public class Tree_Link { ...

  2. java自定义监听器例子_Spring 实现自定义监听器案例

    应用场景: 在一般的javaweb项目中经常有一些缓存是需要再项目启动的时候加载到内存中,这样就可以使用自定义的监听器来实现. 1.在web.xml中声明 com.cn.framework.const ...

  3. android监听器在哪里创建,[转载]android开发中创建按钮事件监听器的几种方法

    第一种:匿名内部类作为事件监听器类 Button button=(Button) findViewById(R.id.button); button.setOnClickListener(new On ...

  4. java web 监听器 例子_Java web技术应用---监听器

    监听器的定义 (专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动) 定义:Servlet规范中定义的一种特殊的类,用于监听Servlet ...

  5. java线程安全例子_Java总结篇系列:Java多线程(三)

    本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 1 public classThreadTest {2 3 public static voi ...

  6. java try catch 例子_Java异常处理综合例子(try、catch、finally、throws、throw)

    Java异常处理综合例子(try.catch.finally.throws.throw) 佟强 2009年11月4日 http://blog.csdn.net/microtong package cn ...

  7. java 扩展类加载器_java实现自定义类加载器

    各类加载器虽然以父子相称,但是没有继承关系 (视频教程推荐:java课程) 点入ClassLoader的源码查看样例:* * class NetworkClassLoader extends Clas ...

  8. java 生成证书图片_java生成自定义证书图片1 - 制作证书word模板

    最近做项目遇到一个需求,生成指定数据的证书图片(比如毕业证,在空的模板中输入自定义的姓名.日期等信息),尝试了许多方法,最终完美地实现了这个需求. 以下内容为制作证书图片的第一步,制作证书word模板 ...

  9. java 生成证书图片_java生成自定义证书图片4

    终于到了生成自定义证书图片的最后一步,pdf转图片我选择使用pdfbox库,以下是工具类: packagecom.x.certificate.pdf;importjava.awt.image.Buff ...

最新文章

  1. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...
  2. 企业网络推广——企业网络推广公司解读企业新站沙盒期如何优化?
  3. 【课后服务】20181022切蛋糕
  4. 《Python语言程序设计》——1.2 什么是计算机
  5. OpenGL(二)三维变换
  6. 技术水平低,就这还敢写自动化项目实战经验丰富?
  7. 分布式设计 —— 容错与主备
  8. [读后感]Java 控制台执行 Jar 传參的编码问题
  9. JDK和CGLIB生成动态代理类的区别
  10. python中wordcloud函数不同形状云图_10行Python代码生成任意形状的文字云图
  11. devc 能优化吗_为啥觉得Dev c++越来越难用?
  12. Python-win32com模块
  13. 【有限元分析】提高有限元分析计算精度的h方法和p方法
  14. 没有基础一样可以一次性拿下CCSK认证?快来看这里!
  15. JAVA实现GIF添加水印
  16. 高质量论文配图配色,让你的图更加亮眼
  17. 摄影测量简答题和作图题
  18. Windows下打包安装程序
  19. 【高数】【本科笔记】【第七章 微分方程】【7.2 可分离变量的微分方程】
  20. T32用的一个python脚本-替换文件中的文件夹路径字符串

热门文章

  1. GitHub 移动端正式发布!
  2. [open3d]RGBD重建场景
  3. (15)点云数据处理学习——单目深度估计获得RGBD图再重建点云
  4. 硬件篇:手把手教你制作属于你的遥控车(51单片机蓝牙小车)
  5. 软件制造工程学习笔记(详尽版)
  6. android快速换机,华为手机换机数据转移用什么最快?华为一键换机方法汇总
  7. 【概率论】随机选出一对小于等于N的互异正整数
  8. 日本免水羽绒服清洗剂,好用到让干洗店倒闭!
  9. 织梦DedeCMS创始人林学 (IT柏拉图)因癌症去世
  10. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java流浪动物救助平台bgo9b