码迷,mamicode.com
首页 > 其他好文 > 详细

图形页面 带 俩按钮 (是与注释、事件监听器相关的,但图形页面与其无关)

时间:2020-03-20 23:58:23      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:void   listener   lang   取消   try   one   sage   close   lis   

看到的一段有意思点的代码,还没完全搞懂,先放在这,慢慢看

package com.woshi;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;

public class AnnotationTest {
    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{

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        JOptionPane.showMessageDialog(null,"单击了确认按钮");
    }
}

class CancelListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        JOptionPane.showMessageDialog(null,"单击了取消按钮");
    }
}

class ActionListenerInstaller{
    public static void processAnnotations(Object o){
        try {
            Class cl = o.getClass();
            for (Field field:cl.getDeclaredFields()){
                field.setAccessible(true);
                ActionListenerFor a = field.getAnnotation(ActionListenerFor.class);
                Object fo = field.get(o);
                if (a != null && fo != null && fo instanceof AbstractButton){
                    Class<? extends ActionListener> listenerClazz = a.listener();
                    ActionListener actionListener = listenerClazz.newInstance();
                    AbstractButton abstractButton = (AbstractButton)fo;
                    abstractButton.addActionListener(actionListener);
                }
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

图形页面 带 俩按钮 (是与注释、事件监听器相关的,但图形页面与其无关)

标签:void   listener   lang   取消   try   one   sage   close   lis   

原文地址:https://www.cnblogs.com/woshi123/p/12535714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!