使用Annotation的示例

package br.com.waslleysouza.ss;


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();
}

你可能感兴趣的:(使用Annotation的示例)