import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class AnnotationTest {
public AnnotationTest() {
super();
}
private JFrame mainWin = new JFrame("使用注解绑定事件监听器");
@ActionListenerFor(listener = OkListener.class)
private JButton ok = new JButton("确定");
@ActionListenerFor(listener = CancelListener.class)
private JButton cancel = new JButton("取消");
public void init()
{
JPanel jp = new JPanel();
jp.add(ok);
jp.add(cancel);
mainWin.add(jp);
ActionListenerInstaller.processAnnotations(this);
mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWin.pack();
mainWin.setVisible(true);
}
public static void main(String[] args)
{
new AnnotationTest().init();
}
}
class OkListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
JOptionPane.showMessageDialog(null,"单击了确认按钮");
}
}
class CancelListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
JOptionPane.showMessageDialog(null,"单击了取消按钮");
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package br.com.waslleysouza.ss;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import javax.swing.AbstractButton;
public class ActionListenerInstaller {
public ActionListenerInstaller() {
super();
}
public static void processAnnotations(Object obj)
{
try{
Class c1= obj.getClass();
for(Field f : c1.getDeclaredFields())
{
f.setAccessible(true);
ActionListenerFor a = f.getAnnotation(ActionListenerFor.class);
Object fObj = f.get(obj);
if(a!=null&&fObj!=null&&fObj instanceof AbstractButton)
{
Class<? extends ActionListener> listenerClazz = a.listener();
ActionListener a1= listenerClazz.newInstance();
AbstractButton ab =(AbstractButton)fObj;
ab.addActionListener(a1);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package br.com.waslleysouza.ss;
import java.awt.event.ActionListener;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionListenerFor
{
/* public ActionListenerFor() {
super();
} */
Class<? extends ActionListener> listener();
}
1188

被折叠的 条评论
为什么被折叠?



