📄 actionlistenerinstaller.java
字号:
package test.annotation.coreTest;
import java.awt.event.*;
import java.lang.annotation.*;
import java.lang.reflect.*;
public class ActionListenerInstaller
{
/**
Processes all ActionListenerFor annotations in the given object.
@param obj an object whose methods may have ActionListenerFor annotations
*/
public static void processAnnotations(Object obj)
{
try
{
Class cl = obj.getClass();
for (Method m : cl.getDeclaredMethods())
{
ActionListenerFor a = m.getAnnotation(ActionListenerFor.class);
if (a != null)
{
Field f = cl.getDeclaredField(a.source());
f.setAccessible(true);
addListener(f.get(obj), obj, m);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
Adds an action listener that calls a given method.
@param source the event source to which an action listener is added
@param param the implicit parameter of the method that the listener calls
@param m the method that the listener calls
*/
public static void addListener(Object source, final Object param, final Method m)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
InvocationHandler handler = new
InvocationHandler()
{
public Object invoke(Object proxy, Method mm, Object[] args) throws Throwable
{
return m.invoke(param);
}
};
Object listener = Proxy.newProxyInstance(null,
new Class[] { java.awt.event.ActionListener.class },
handler);
Method adder = source.getClass().getMethod("addActionListener", ActionListener
.class);
adder.invoke(source, listener);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -