反射在Java Swing编程中的应用
日期:2007年9月18日 作者: 查看:[大字体 中字体 小字体]-
学习过Java Swing的读者一定对于Swing中相对较为复杂的事件驱动模型比较困惑,虽然事件驱动模型在Java Swing中被完完全全的体现出来了,但是对于一个软件初学者而言这样的近乎“裸体”的事件驱动模型确实是很难理解的。
Microsoft公司.Net框架与Java Swing的GUI编程相比要简单很多,同样是事件驱动模型.Net框架就进行了大量的封装处理,.Net把这种封装称之为委托器(Delegate)其代码如下:
//当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篇)):
//为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处理被我们用反射实现了。(出处:急速软件下载学院)
-
- 反射在Java Swing编程中的应用 相关文章:
- ·卡巴斯基防火墙“反黑客”的设置技巧
- ·谷歌清除恶意链接 黑客反击破坏排名系统
- ·认识反网络钓鱼欺骗新技术
- ·微软Win Vista SP1加强反盗版
- ·企业选择反间谍软件程序10个要点
- ·增加Distinct后查询效率反而提高
- ·文件遭破坏致Win XP系统反复重启
- ·互联网基础建设影响博客 反对封杀P2P
- ·Xml 串行话对象与反串行实例
- ·Photoshop模拟太阳镜上的反光图像
- 反射在Java Swing编程中的应用 相关软件
- ·《反恐精英》uyr精彩主视角录像
- ·《反恐精英》JAEGARN精彩主视角录像
- ·《反恐精英》录像:aTTaX vs GoodGame
- ·《反恐精英》NoA.ave精彩主视角录像
- ·《反恐精英》录像:MYM vs Logitech.fi
- ·《反恐精英》录像:俄罗斯 vs 法国
- ·《反恐精英》stone精彩主视角录像
- ·《反恐精英》fnatic.f0rest精彩主视角录像
- ·《反恐精英》saken精彩主视角录像
- ·《反恐精英》SK训练地图:glock 下载
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·JAVA教程 第五讲 AWT图形用户界面设计
- ·SP 短信开发-基础知识篇
- ·使用JAVAMAIL发邮件的一个例子(转)
- ·J2ME蓝牙程序开发实战入门
- ·用Java实现音频播放
- ·使用SimpleDateFormat必须注意的问题
- ·Sun:JavaFX Mobile和JavaFX Script
- ·Java EE6提案的两大主题:拓展性和概要
- ·Java会因为RoR的流行而过时吗?
- ·Java资料:Swing中的事件处理详细资料
- ·Java知识:Web应用下实现定时任务简便方法
- ·技巧:Java中用动态代理类实现记忆功能
- ·新手入门:写Java程序的三十个基本规则
- ·入门:Java初学者入门要注意的基础知识
- ·Java SE 6中XML数字签名标准Java接口
- ·JForum 2.1.7 源程序编译草记
- ·Spring中的Template和Callback模式
- ·从集合类的升级联想到Java适配器模式
- ·I18N-国际化消息和日志
- ·通过JDMK 进行遗留系统管理
特别推荐
- ·Java精华积累:初学者都应该搞懂的问题
- ·Java多媒体框架设计自动播放机实例详解
- ·如何有效防止Java程序源码被人偷窥?
- ·Cell插件在J2EE系统中的应用
- ·初学者想学Hibernate,初级基础教程
- ·Java语言实现支持视频点播的WEB服务器
- ·关于Java编程的中文问题的几条分析原则
- ·确保J2ME无线移动商业应用程序的安全性
- ·Java开源技术:Eclipse的使用技巧详解
- ·新手入门:Java中的修饰词使用方法总结
- ·JAVA开发者应该去的20个英文网站
- ·使用JDBC创建数据库访问程序
- ·JDK的命令详解
- ·Java学习从入门到精通(附FAQ)
- ·Tomcat性能调整
- ·JSF:Java中面向Web开发的生旦净末丑
- ·对Java语言入门初学者的一些建议
- ·Java技术的新方向
- ·Jive源代码研究
- ·谨慎使用Date和Time类
