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創建的實例,然后根據這個類中的處理事件信息的方法模塊對信息進行了處理(將背景設置成了紅色)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM