中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java如何使用自定義注解實現為事件源綁定事件監聽器操作

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

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

具體如下:

一 定義注解

import java.lang.annotation.*;import java.awt.event.*;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ActionListenerFor{  // 定義一個成員變量,用于設置元數據  // 該listener成員變量用于保存監聽器實現類  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())     {      // 將該成員變量設置成可自由訪問。      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元數據(它是一個監聽器類)        Class<? extends ActionListener> listenerClazz = a.listener();        // 使用反射來創建listner類的對象        ActionListener al = listenerClazz.newInstance();        AbstractButton ab = (AbstractButton)fObj;        // 為ab按鈕添加事件監聽器        ab.addActionListener(al);      }     }   }   catch (Exception e)   {     e.printStackTrace();   }  }}

三 測試注解程序

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

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

向AI問一下細節

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

AI

太谷县| 哈巴河县| 左云县| 永吉县| 余姚市| 醴陵市| 新密市| 蓝山县| 沭阳县| 古田县| 西城区| 剑河县| 临沂市| 苗栗市| 缙云县| 贵定县| 密山市| 嘉峪关市| 南投县| 长宁区| 揭东县| 彭阳县| 武川县| 珠海市| 廉江市| 荥阳市| 蒙城县| 松滋市| 乐昌市| 辉县市| 徐闻县| 广德县| 铁岭县| 安图县| 盐山县| 特克斯县| 墨脱县| 佛冈县| 莲花县| 卓尼县| 淮滨县|