溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java如何使用自定義注解實現(xiàn)為事件源綁定事件監(jiān)聽器操作

發(fā)布時間:2021-09-27 14:28:39 來源:億速云 閱讀:75 作者:小新 欄目:編程語言

這篇文章主要介紹了Java如何使用自定義注解實現(xiàn)為事件源綁定事件監(jiān)聽器操作,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

一 定義注解

import java.lang.annotation.*;import java.awt.event.*;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ActionListenerFor{  // 定義一個成員變量,用于設(shè)置元數(shù)據(jù)  // 該listener成員變量用于保存監(jiān)聽器實現(xiàn)類  Class<? extends ActionListener> listener();}

二 注解處理程序

import java.lang.reflect.*;import java.awt.event.*;import javax.swing.*;public class ActionListenerInstaller{  // 處理Annotation的方法,其中obj是包含Annotation的對象  public static void processAnnotations(Object obj)  {   try   {     // 獲取obj對象的類     Class cl = obj.getClass();     // 獲取指定obj對象的所有成員變量,并遍歷每個成員變量     for (Field f : cl.getDeclaredFields())     {      // 將該成員變量設(shè)置成可自由訪問。      f.setAccessible(true);      // 獲取該成員變量上ActionListenerFor類型的Annotation      ActionListenerFor a = f.getAnnotation(ActionListenerFor.class);      // 獲取成員變量f的值      Object fObj = f.get(obj);      // 如果f是AbstractButton的實例,且a不為null      if (a != null && fObj != null         && fObj instanceof AbstractButton)      {        // 獲取a注解里的listner元數(shù)據(jù)(它是一個監(jiān)聽器類)        Class<? extends ActionListener> listenerClazz = a.listener();        // 使用反射來創(chuàng)建listner類的對象        ActionListener al = listenerClazz.newInstance();        AbstractButton ab = (AbstractButton)fObj;        // 為ab按鈕添加事件監(jiān)聽器        ab.addActionListener(al);      }     }   }   catch (Exception e)   {     e.printStackTrace();   }  }}

三 測試注解程序

import java.awt.event.*;import javax.swing.*;public class AnnotationTest{  private JFrame mainWin = new JFrame("使用注解綁定事件監(jiān)聽器");  // 使用Annotation為ok按鈕綁定事件監(jiān)聽器  @ActionListenerFor(listener=OkListener.class)  private JButton ok = new JButton("確定");  // 使用Annotation為cancel按鈕綁定事件監(jiān)聽器  @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();  }}// 定義ok按鈕的事件監(jiān)聽器實現(xiàn)類class OkListener implements ActionListener{  public void actionPerformed(ActionEvent evt)  {   JOptionPane.showMessageDialog(null , "單擊了確認按鈕");  }}// 定義cancel按鈕的事件監(jiān)聽器實現(xiàn)類class CancelListener implements ActionListener{  public void actionPerformed(ActionEvent evt)  {   JOptionPane.showMessageDialog(null , "單擊了取消按鈕");  }}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java如何使用自定義注解實現(xiàn)為事件源綁定事件監(jiān)聽器操作”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI