快速业务通道

Merlin的魔力: 动态事件监听器代理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
rInterface,                Object target,                String action) public static Object create(Class listenerInterface,                Object target,                String action,                String eventPropertyName) public static Object create(Class listenerInterface,                Object target,                String action,                String eventPropertyName,                String listenerMethodName)

让我们更详细地看一下这三种方法。

使用 create(Class, Object, String)

因为第一种方法的参数最少,所以它最简单。第一个参数是 EventListener 类型,您要实现的就是它的接口,例如,要响应按钮选择,这个参数应该是 ActionListener.class ,以表示这个接口的 Class 对象。虽然 ActionListener 只有接口中的一个方法,但是以这种方式创建接口的一个实现意味着这个接口实现的所有方法都将执行同样的代码。

第二和第三个参数是相互关联的。它们结合在一起说明调用 Object 目标的 String 操作方法。然后使用反射,您有一个 ActionListener 实现,但是没有在文件系统中增加一个 .class 文件。清单 3 重复了前面 图 1 中的按钮选择例子,使用了一个 EventHandler 。注意 println() 调用需要转移到一个方法中,这样就可以从处理程序中调用它。

清单 3. 展示 create(Class, Object, String)

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.beans.*; public class ButtonEventHandler extends JFrame {   public ButtonEventHandler() {    super("Selection");    setDefaultCloseOperation(EXIT_ON_CLOSE);    JButton button = new JButton("Pick Me");    Container contentPane = getContentPane();    contentPane.add(button, BorderLayout.CENTER);    button.addActionListener(     (ActionListener)EventHandler.create(      ActionListener.class,    this,    "print")    );   }   public void print() {    System.out.println("Hello, World!");   }   public static void main(String args[]) {    JFrame frame = new ButtonEventHandler();    frame.setSize(200, 100);    frame.show();   } }

create() 中调用 EventHandler 的代码只是表示“在需要通知按钮所附的 ActionListener 时,调用我们的 print() 方法( this )”。不过有一些副作用。第一个是调用需要强制类型转换,以返回正确的监听器类型,从而满足编译器要求。另一个副作用是由于对 print() 的调用是通过反射间接进行的,所以这个方法必须是公共的(并且不接受参数)。使用 EventHandler 的另一个特点是对于其他版本的 create() 来说,很少出现问题。

Merlin的魔力: 动态事件监听器代理(3)

时间:2011-02-02 IBM John Zukowski

使用 create(Class, Object, String, String)

下一版本的 create() 添加了第四个参数,并增加了第三个参数的用途。第一个 String 参数现在也可以表示 Object 参数的可写 JavaBeans 属性的名字。所以,对于 JButton ,如果第三个参数是 text ,那么这相当于一个 setText() 调用,该方法所需要的参数是由传递给第四个参数的 String 来表示的。

第四个参数使您可以访问事件的可读属性,用第三个参数传递的值设置可写属性。为了示范这一点,清单 4 提供了一个用于输入的 JTextField 组件和一个用

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号