• 首页
  • PHP
  • .Net
  • Java
  • Javascript
  • HTML/CSS
  • Linux
  • Windows
  • Blog
  • //当btnsubmit按钮被点击以后要求交给btnsubmit_click方法处理
    // eventhandler在中间启到委托器的作用,
    //它负责将事件分发到指定的方法中进行处理
    this.btnsubmit.click += new eventhandler(this.btnsubmit_click);
    //事件处理方法
    // object sender:事件源,这里指btnsubmit对象
    // eventargs e:事件处理参数,它保存了需要提供给程序员的必要信息
        private void btnsubmit_click(object sender, eventargs e)
        {
            //打印this is a button语句
            system.diagnostics.debug.writeline("this is button");
    }

      作为对比,我们来看看java swing的事件处理和委托就要复杂很多:代码如下:(您若还不是很了解swing事件驱动的话,可以参考我的另外一篇文章:事件驱动模型实例详解(java篇)):[iocblog.net 来源]

    //为btnsubmit增加侦听器selecthandler,当btnsubmit被点击以后
    //有侦听器的actionperformed负责处理该点击事件的业务
    //由于事件源btnsubmit和侦听器类selecthandler处于两个不同的类中
    //为了让selecthandler类取得页面的信息,我们需要将窗体对象(this)
    //传入到侦听器中
    btnsubmit.addactionlistener(new selecthandler(this));
    //侦听器selecthandler,它必须实现动作事件actionlistener接口
    //以达到事件分发的作用
    class selecthandler implements actionlistener {
        private commondialogdemo form = null;
        //将窗体对象commondialogdemo通过构造函数传入selecthandler类中
        public selecthandler(commondialogdemo form) {
            this.form = form;
        }
        //事件处理方法,当btnsubmit被点击,自动执行以下打印代码
        publicvoid actionperformed(actionevent e) {
            system.out.println("this is button");
        }
    }

      根据以上代码,我们可以清晰的看到java swing要比。net的麻烦的多,而且更不能让人忍受的就是,一个页面如果有多个按钮的话,我们必须针对每个按钮编写多个事件侦听类,而且这些类一般都会被设为内部类。学过软件建模的读者可能知道,内部在软件建模在软件工程中是不推荐使用的,所以这样的代码编写明显会增加设计冗余度和复杂度,因此我们可以考虑自己编写一个类似于。net中eventhandler一样的事件委托类来处理事件分发。

      由于我们无权修改Java的编译器,所以我在这里将会借助于反射技术,利用一个事件委托类处理所有的点击事件,代码如下:

     

    package cn.softworks.teachersearchsystem.support;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.lang.reflect.Method;
     
    /**
     *该类是用来处理所有的Swing按钮点击事件,并根据将处理权<br>
     *转交给使用者来处理
     *
     *@authorChen.yu
     *
     */
    publicclass EventHandlerimplements ActionListener {
       
        //组件所在的窗体对象
        private Object form = null;
       
        //受到委托的方法名
        private String methodName = null;
       
        /**
         *构造函数
         *
         *@paramform           组件所在的窗体对象
         *@parammethodName     受到委托的方法名
         */
        public EventHandler(Object form,String methodName) {
            this.form = form;
            this.methodName = methodName;
        }
       
        /**
         *事件处理委托方法
         */
        publicvoid actionPerformed(ActionEvent e) {
           
            //得到窗体对象的类型
            Class formType = this.form.getClass();
           
            try {
                //得到指定委托方法的类型
                Method method =
        formType.getMethod(this.methodName, new Class[] {e.getClass()});
                //调用指定的方法
                method.invoke(this.form, new Object[] {e});
               
            }catch(Exception ex) {
               
                return;
            }      
       
        }
     
    }

      现在我们来编写一个测试程序,代码如下:

     

    btnSearch.addActionListener(
    new EventHandler(this,"btnSearch_Click"));
     
    public void btnSearch_Click(ActionEvent e) {
        System.out.println("This is btnSearch");
    }

      从以上代码中我们可以清晰的看到,事件处理和事件委托处于同一窗体中了,.Net方便的Delegate处理被我们用反射实现了。

     

     


    Tag: Swing ,反射



    文章整理:iocblog
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。



相关文章 
  • 反射填充泛型集合List方法
  • 在Linux上解决用Swing出现中文方块问题
  • 对.NET Framework 反射的反思
  • 通过反射填充泛型集合List的静态方法
  • .NET反射的简单示例
  • Java Reflection (JAVA反射)详解
热门项目 
  • EasyMock
  • ImageMagick
  • Lucene
  • iBATIS
  • BugFree
  • SQL Server
  • shttpd
  • JFtp
  • ArcGIS
  • PHPA the PHP Accelerator
热门文章 
  •  从JAR文件中读取文件 
  • Java的File对象递归删除目录下所有内容
  • java计算磁盘空间的大小
  • 高级图像处理图像I/O API RC 1.0
  • 使用Java中的Date和Calendar类
  • windows中双击jar文件即可运行写法
  • 在JAVA文件中获取项目的相对路径
  • Java语言深入 JAVA之精髓IO流
  • Java读写序列化类的例子
  • Java执行外部命令,并把结果回显到控制台
标签 
    modules 磁盘性能 分区表 字符转换 时间函数 WPF 加速 rewrite 留言薄 Shell 开机启动 远程桌面 chkconfig 备份系统 Table 虚拟光盘 php安全 模版 彻底删除 IP地址
好运气 
  • java中使用MD5加密算法进行加密
  • String Buffer的小问题解决
  • 类的成员函数的说明
  • java计算磁盘空间的大小
  • Java.util包简介 如何开发应用之二
  • Java编程-谈谈JAVA中的调用方式
  • Java执行外部命令,并把结果回显到控制台
  • Java列表排序代码分析
  • Java读写序列化类的例子
  • md5算法源代码java
 关于我们联系我们友情连接黑板报版权说明
© 2007 Iocblog.net. Powered by IocCMS 2.0.   粤ICP备 07000162号