• Java 中 Listener 模式示例
    时间:2012-02-17?? 作者:佚名?? 出处:互联网

    Listener模式在Java中很常见,并且很有用,下面例举一下Java的Listener模式,希望对大家有所帮助。

    鼠标点击监听示例。

    先定义鼠标动作监听器:

    1 interface MouseListener {
    2???? //当click方法被调用的时候代表被鼠标点击了.
    3????? void click();
    4 }

    上面是一个接口,里面只有一个方法.先就通过一个例子展示java是如果施展多态的力量了.

    ?1 public class Model {
    ?2
    ?3???? //初始化50个监听器
    ?4????? private MouseListener[] listeners = new MouseListener[50];
    ?5???? //用于记录当前listeners数组记录到了哪里
    ?6????? int index = 0;
    ?7
    ?8???? public void addListener(MouseListener listener) {
    ?9???????? //向这个model中注册一个监听器
    10????????? listeners[index++] = listener;
    11???? }
    12
    13???? public void clickModel() {
    14???????? //调用注册进来所有的listener的click方法
    15????????? for (int i = 0; i < index; i++) {
    16???????????? listeners[i].click();
    17???????? }
    18???? }
    19???? //测试model
    20????? public static void main(String[] args) {
    21???????? Model model = new Model();
    22???????? //添加一个匿名内部类,里面实现了click方法.
    23????????? model.addListener(new MouseListener() {
    24
    25???????????? public void click() {
    26???????????????? System.out.println("我被点击了");
    27???????????? }
    28???????? });
    29???????? //再添加一个内部类.
    30????????? model.addListener(new MouseListener() {
    31
    32???????????? public void click() {
    33???????????????? System.out.println("我被点击了");
    34???????????? }
    35???????? });
    36
    37???????? //下面给model一个点击
    38????????? model.clickModel();
    39???? }
    40 }


    我们可以看到,只点击一次model,却可以输出了2次"我被点击了"的信息.这也就是为什么你可以向JButton,JComboBox,JList,JTable等等里面添加任意多的各种listener.当然其中的奥秘仍需要各位读者自己慢慢琢磨.

    网友留言/评论

    我要留言/评论

    相关文章

    Java Annotation手册(详解):在上篇文章《Java Annotation入门》中概要性的介绍了Annotation的定义、使用,范围涵盖较广,但是深度不够。所以作者在《Java Annotation入门》后,继续整理了Annotation的概念和知识点,与喜欢research的朋友们共享。
    利用 Java 6 javax.script 包直接处理 JSON:以往我们在Java中处理 JSON 数据时,经常会引用到各种 json 的第三方 jar 包。有时很简单的功能,而引用比较臃肿的包,是比较难以容忍的。很高兴我们可以使用Java 6 提供的 javax.script 包来处理。 Java 有了支持其他脚本语言的特性,例如 JavaScript。而 JavaScript 对 JSON 的支持是天生具备的。让我们来看一些实例。
    (DOM解析xml )Android中的XML解析与生成:DOM解析XML文件时,会将XML文件的所有内容以对象树方式存放在内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容以对象树方式存放在内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。
    JRockit读书笔记I — Java代码的高效执行:《Oracle JRockit: The Definitive Guide》一书是由Oracle JRockit的两位资深开发人员写的,其中的Marcus Hirt更是JRockit Mission Control的leader,这本书详细的对Oracle JRockit进行了介绍,最突出的特点非常系统化的介绍了一个JVM通常是如何实现的,而JRockit这样一个极为优秀的JVM又是做了哪些优化,为什么做这些优化,这本书对于对JVM感兴趣的同学而言应该是必读的一本书,其实即使对于JVM兴趣不强的同学,里面的优化思路的介绍也是值得学习,本系列的blog主要是总结看这本书得到的一些收获,由于书中知识量巨大,因此得分成多篇blog来总结了。
    JSTL教程大全 - core篇和sql篇:最近又开始搞WEB部分开发,使用了JTSL,虽然知道这玩意很简单,但是真正做起来还是需要查询相关资料,搜了半天都没找到合适的,最后终于找到了一份较全的文档,给大家分享一下。JSTL标签、
    JSTL教程大全 - fn函数篇:最近又开始搞WEB部分开发,使用了JTSL,虽然知道这玩意很简单,但是真正做起来还是需要查询相关资料,搜了半天都没找到合适的,最后终于找到了一份较全的文档,给大家分享一下。
    有关Mina基础技术知识介绍:Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。初学MINA的同学开始可能会感觉迷茫,为了让初学者更快的入门,qq运动的红包存在哪里吧给大家准备一篇Mina入门介绍,希望对大家有所帮助。
    HashMap的几种遍历测试和总结:HashMap遍历是开发者经常遇到的,遍历的方式也有多种,但是哪种方式最优呢,笔者此次做了下测试,请看测试过程和结果。
    在Android中自定义标题栏之显示网页加载进度:最近在做Lephone的适配,测试组提交了一个bug:在标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观,因为联想将原生的标题栏UI进行了修改。修改的过程中遇到了一个难题,系统自带的那个标题栏进度总能够到达100%后渐退,但是我每次最后到100%那一段显示不全,尝试了用线程程序死了卡主了不说,还是一样的效果,后来同事一句话提醒了我用动画。确实是这样我猜系统的也是这样实现的,等进度到达100%后,用动画改变它的透明度就ok了。
    有关android重要类库的分类描述:在 Android 的应用程序开发中,通常使用的是 JAVA 语言,除了需要熟悉 JAVA 语言的基础知识之外,还需要了解 Android 提供的扩展的 JAVA 功能。在一般的 JAVA 应用中,如果需用引用基础类库,通常需要使用如下的方式:import javax.swing.*;以上代码表示了引用 JAVA 的 GUI 组件 Swing,javax.swing 即 JAVA 中的一个包。