1. 程式人生 > >Java ActionListenner類的一些理解

Java ActionListenner類的一些理解

  Java的ActionListenner事實上我去年年這個時候大概就已經接觸到了,也學會了比較簡單的使用。但卻始終不能理解ActionListenner的一系列的執行是怎麼維持這麼一個聯絡的?

  我產生了很多疑問,但卻無法解決,也許是當初實在對Java理解得太淺了。

  在一年後的今天,我再次接觸到了ActionListenner,且有了一些新的個人的理解,特在此記錄。

  

  正文:

    首先我一開始所產生的幾個疑問:

    為什麼要有ActionListenner?

    ActionListener是什麼?

    ActionListenner如何使用?

    ActionListenner是如何與事件(我的操作,例如:點選某個按鈕)產生的聯絡?

  個人理解: 這些問題提得有點太大了,或許並不是我現在能定義的,但是我想暫且回答一下之前的自己,以達到一個記錄與學習的作用吧。

    為什麼要有ActionListenner?

      計算機通過鍵盤和滑鼠進行操作,但是鍵盤和滑鼠所謂的"輸入"和"點選",其實僅僅是傳送給了電腦。而我們所看見的點選"X",就關閉對應的頁面。我打按下鍵盤"jianpan",輸入法就直接出現了一系統可能的提示結果(1.鍵盤 2.監盤..)讓我進行選擇。

      而如若我們沒有各種程式語言中的事件監聽類或者方法,那麼我們就無法實現這麼神奇和優質的人機互動。

      如若沒有事件監聽:

        我點選關閉,電腦硬體收到了一個點選的訊號,而軟體沒有任何處理資訊的方法,那麼也無從關閉,甚至我們連移動滑鼠游標也無法做到,人無法與電腦互動,也就是人無從使用電腦。

    ActionListener是什麼?

      根據我所看得Java的ActionListener類發現:這個類是一個介面類,且這個類裡面只定義了一個方法。

public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     * 
@param e the event to be processed */ public void actionPerformed(ActionEvent e); }

      以上便是Java的ActionListener類,其中actionPerformed是任何繼承了這個類都要重寫的方法,這個方法可以接收到 ActionEvent e 也就是事件,目前我們暫且不談什麼事件會被傳送至這個函式。而對於這個函式的功能來說,很顯然:我們可以根據傳入的事件的不同,進行不同的處理操作,這個函式也就是一個處理事件的一個函式。而這個類又主要只有這麼一個函式(它繼承了EventListener,也可能有其他方法)。所以這個類我總結一下是 : 作為一個監聽類介面,以規範實現它的類,防止實現的時候忘記對事件資訊的處理的一個介面類。

  

  ActionListenner是如何與事件(我的操作,例如:點選某個按鈕)產生的聯絡?

    我之所以先回答這個問題在於我認為,如若不知道這個聯絡是如何產生的,那麼就不知道如何好地使用這個類。

    首先:ActionListenner是一個介面,那麼自然需要一個類去實現它,而實現它的那個類一定需要重寫該介面內部的actionPerformed方法,那麼就實現了一個可以處理事件資訊的功能,而事件從何而來,則是關於另一個方法:註冊監聽(addActionListener),對於視窗類或者一些元件類都具有這個方法,也可以不準確地說:對於一切可能產生事件資訊的類都有這種方法,且這個方法需要傳入一個引數,這個引數是一個實現了ActionListenner的事件監聽類。

  ActionListenner如何使用?以及對產生聯絡的具體闡述。

    舉例:一個處於某個視窗類(myFrame)的某個按鈕例項button需要實現一個功能即:按下這個按鈕,當前對應的視窗背景顏色就變成紅色。

    那麼我們可能需要在視窗類中處理這個按鈕的資訊,因為設定背景顏色這個操作很可能需要使用到這個類的一些方法,所以我們明確了處理資訊在myFrame這個類中,那麼就得先實現ActionListenner介面以及它內部的方法來實現對於事件資訊的處理,然後我們可能需要在這個方法裡面進行一些列的操作:如若我接收到了這個資訊,那麼我就調整背景顏色,這麼個邏輯關係。但至今我們是還沒有事件資訊會傳進來的,因為還沒有任何一個"可能產生事件資訊的類"在註冊監聽時傳入了這個類產生的引用(this),所以我們還需要使用我們之前的button這個例項去註冊監聽,並且將this(因為button也在myFrame類內)傳入。這時候就達成了一種具體的聯絡:滑鼠在button座標位置點選了一下,作業系統取得了滑鼠的點選操作依據當前游標的座標,然後對所有註冊了監聽的控制元件進行座標比對,然後得知了點選在button這個控制元件上,於是根據註冊監聽時候的地址,找到了並將點選事件訊息傳送方給了當前button這個物件所屬的一個以myFrame建立的例項,然後根據這個類中的處理事件資訊的方法模組對資訊進行了處理(將背景設定成了紅色)。