事件分析,采用代理和反射
来源:互联网 发布:怎么打罗马数字mac 编辑:程序博客网 时间:2024/04/28 23:28
package debug;
import java.awt.*;
import java.beans.*;
import java.lang.reflect.*;
public class EventTracer {
public EventTracer() {
handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) {
System.out.println(method + ":" + args[0]);
return null;
}
};
}
public void add(Component c) {
try {
//分析寻找这个组件中的形如:addXxxListener(XxxEvent)的所有方法
BeanInfo info = Introspector.getBeanInfo(c.getClass());
//对于每一个匹配的方法,都会生成一个EventSetDescriptor对象
EventSetDescriptor[] eventSets = info.getEventSetDescriptors();
for(EventSetDescriptor eventSet : eventSets) {
//将这个对象传递给addListener方法
addListener(c, eventSet);
}
} catch (Exception e) {
}
//如果该组件是一个容器
if(c instanceof Container) {
//递归列出其中的每一个组件
for(Component comp : ((Container)c).getComponents()) {
//递归调用add方法
add(comp);
}
}
}
/**
* @param c 监测其事件的组件
* @param eventSet 事件设置的描述符
*/
public void addListener(Component c, EventSetDescriptor eventSet) {
Object proxy = Proxy.newProxyInstance(null, new Class[] {eventSet.getListenerType()}, handler);
Method addListenerMethod = eventSet.getAddListenerMethod();
try {
addListenerMethod.invoke(c, proxy);
} catch (Exception e) {
}
}
private InvocationHandler handler;
}
- 事件分析,采用代理和反射
- jdk 源码分析(21)java 动态代理和反射
- 反射和代理
- java 反射和代理
- JAVA 反射和代理
- Java 反射和代理
- 反射和动态代理
- 反射和代理机制
- 反射和代理
- 反射和动态代理
- 反射和代理
- 委托,事件和反射
- 事件代理和事件委托
- 事件委托和事件代理
- 代理和事件
- [转]代理和事件
- c#代理和事件
- Java反射和动态代理
- 将out和err流定向到指定流中,再将这个流显示到JTextArea
- c#面试题及答案(二)
- SQL语句更新时间字段的年份、月份、天数、时、分、秒
- qtcreator使用自带的更新功能 更新。。之后。。。及ubuntu10.04 下No documentation available的解决。
- 每日一水~ 2012-04-25 HDU 1021 HDU 1002
- 事件分析,采用代理和反射
- 黑马程序员--第一阶段2.java编程基础--第4天
- visual studio 2010
- VS2005与IE8的冲突
- GDI入门实例(在VC++6.0中将JPG格式图片转换成BMP格式)
- 与、或、异或的操作
- ORACLE EXECUTE IMMEDIATE 小结
- matlab2
- D. Common Divisors CF 182D