Merlin的魔力: 动态事件监听器代理[Java编程]
本文“Merlin的魔力: 动态事件监听器代理[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
全部 Swing 组件都是 JavaBeans 组件.它们有一系列的 setter 和 getter 办法,这些办法的近似于 void setXXX(范例名) 和 Type getXXX() .关于这些办法没有什么分外之处,并且正如所预期的,它们遵守 JavaBeans 的属性命名标准.我们本日要谈论的是JavaBeans 组件的一个方面,即一对监听器办法 addXXXListener (XXXListener name) 和 removeXXXListener (XXXListener name) . XXListener 在这里指的是一个监听器对象,它扩大了 EventListener 接口,等候与监听器关联的组件中的各种事件发生.当事件发生时,全部注册的监听器城市得到事件的告诉(没有特定的次序).通过魔术般的一个小反射(reflection)和一个新的 java.beans.EventHandler 类,您可以将一个监听器附加到一个 bean 上,而无需直接实现这个监听器接口大概成立那些烦人的小匿名内部类.
从前的办法
在深化到利用新的 EventHandler 类的细节之前,让我们回想一下不利用这个类时是若何举行工作的.我们举一个对 Swing 框架中的按钮挑选做出呼应的简单例子.挑选一个按钮生成一个 ActionEvent .要对这个事件做出呼应,需求将 ActionListener 附加到这个按钮上,如清单 1 所示:
清单 1. 监听尺度按钮挑选
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonSelection extends JFrame {
public ButtonSelection() {
super("Selection");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton button = new JButton("Pick Me");
Container contentPane = getContentPane();
contentPane.add(button, BorderLayout.CENTER);
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Hello, World!");
}
}
);
}
public static void main(String args[]) {
JFrame frame = new ButtonSelection();
frame.setSize(200, 100);
frame.show();
}
}
这里没有任何奇异之处,您大概已经熟习这种代码了.这里, ActionListener 实现是合时定义的,它定义为一个匿名内部类,并直接附加到按钮上.在挑选这个按钮时,字符串 Hello, World! 就打印到掌握台中.与程序关联的屏幕如图 1 所示:
图 1. 带 ActionListener 的按钮挑选
在 JavaBeans 标准中,没有要求您成立匿名内部类举行事件监听. IDE 工具常常采取这种行为:您说要一个监听器,它就生成一个 stub,然后您填入细节.完成一样工作的其他方法包含在调用类中供应指定的实现大概实现您自己的接口.
定义了每一个实现类后,就会成立一个单独的.class 文件.所以,在前面的 ButtonSelection 程序中,您会看到编译器生成两个 .class 文件:ButtonSelection.class 和 ButtonSelection$1.class. $1 是 Sun 编译器命名匿名内部类的方法,计数随着每一个类增添.其他编译器大概有差别的命名方法.
以上是“Merlin的魔力: 动态事件监听器代理[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |