国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java如何使用自定義注解實(shí)現為事件源綁定事件監

發(fā)布時(shí)間:2021-09-27 17:50 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù)

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

具體如下:

一 定義注解

import java.lang.annotation.*;import java.awt.event.*;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ActionListenerFor{  // 定義一個(gè)成員變量,用于設置元數據  // 該listener成員變量用于保存監聽(tīng)器實(shí)現類(lèi)  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對象的類(lèi)     Class cl = obj.getClass();     // 獲取指定obj對象的所有成員變量,并遍歷每個(gè)成員變量     for (Field f : cl.getDeclaredFields())     {      // 將該成員變量設置成可自由訪(fǎng)問(wèn)。      f.setAccessible(true);      // 獲取該成員變量上ActionListenerFor類(lèi)型的Annotation      ActionListenerFor a = f.getAnnotation(ActionListenerFor.class);      // 獲取成員變量f的值      Object fObj = f.get(obj);      // 如果f是AbstractButton的實(shí)例,且a不為null      if (a != null && fObj != null         && fObj instanceof AbstractButton)      {        // 獲取a注解里的listner元數據(它是一個(gè)監聽(tīng)器類(lèi))        Class<? extends ActionListener> listenerClazz = a.listener();        // 使用反射來(lái)創(chuàng )建listner類(lèi)的對象        ActionListener al = listenerClazz.newInstance();        AbstractButton ab = (AbstractButton)fObj;        // 為ab按鈕添加事件監聽(tīng)器        ab.addActionListener(al);      }     }   }   catch (Exception e)   {     e.printStackTrace();   }  }}

三 測試注解程序

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

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

97国产精华最好的产品亚洲| 国产边摸边吃奶叫床视频| 97精品一区二区视频在线观看| 久久亚洲一区二区三区舞蹈| 人人妻人人澡人人爽不卡视频| 国产精品成人99久久久久|