程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA的事件處理機制

JAVA的事件處理機制

編輯:關於JAVA

Java的事件處理機制的核心內容是:事件的發生與事件的處理相分離。也就是說,某一個組件發生了一些變化,則該組件只需要產生一個事件,而不用關心該事件如何被處理。其它組件如果對該事件感興趣,則編寫相應的事件處理代碼。

舉個例子:點擊一個按鈕,改變JPanel的背景色。事件的發生代碼一定是寫在按鈕類裡面的(由於這個事件已經被AWT定義好了,因此不用我們操心,後面會講到自定義事件),而事件的處理代碼一定是寫在JPanel類裡面的(我們會在繼承於JPanel的一個類中定義一個ActionListener,實現actionPerformed方法),最後把這個ActionListener添加到JButton中,表示JPanel對JButton的點擊事件感興趣。

下面來談一談自定義事件,這才是本文的重點。首先請想一下,Event到底是什麼?我認為,Event就是變化,比如鼠標移動了,窗口最大化了,甚至一個類的屬性被改變了……但變化不是Event!那什麼樣的變化才能算是一個Event呢?其他組件感興趣的變化才是一個Event。比如上面的點擊按鈕改變背景色,JButton被點擊後,JPanel的顏色發生了變化,即JPanel對JButton的點擊很感興趣,因此,該點擊才算是一個事件,才應該用到JAVA的事件處理機制:事件的發生與處理相分離!如果某一個類的變化只有他自己感興趣,別的類都不感興趣,那麼就沒必要使用Java的事件處理機制,直接把事件的處理代碼寫在該類中就可以了(JButton等類是系統定義的,我們很難去修改他的源代碼,因此還是用事件處理機制比較好,我這裡主要強調自定義的類)。

作為一個自定義的類,如果發生了某些變化,該如何處理這些變化呢?是自己寫代碼處理,還是利用JAVA的事件處理機制,把處理代碼寫到別的類裡面呢?還是我上面那句話,要看看這個類的變化,其他類是否感興趣。如果其他類都不感興趣,那麼毫無疑問自己解決就行了;如果只有有限的幾個類感興趣,那麼自己解決或者使用JAVA的事件機制都行;如果對此感興趣的其他類情況未知,數量未知,那麼一定要調用JAVA的事件處理機制,自己是搞不定的。舉個不太恰當的例子:比如劉德華的手破了流血了(一個只有自己感興趣的事件),那麼自己包扎一下就行了(自己處理);如果劉德華死了(他老婆和他感情很深,決定殉情),那麼關於這一事件的處理,也可以由劉德華自己搞定(先殺掉老婆,在自殺);如果劉德華死了,世界上有無數多的fans決定一起殉情,這種情況就不是由劉德華一個人能搞定的了(華仔不能拿著一把菜刀尋遍全世界,把所有願意殉情的fans都殺死再自殺吧,工程太浩大了~),只能采用Java事件處理機制,把劉德華的死訊通知全世界,願意殉葬的fans自己自殺(如何處理事件完全由自己決定,不由華仔決定)。

那麼自定義事件的代碼該如何寫呢?首先自定義一個MyEvent類,再自定義一個MyListener類,該類中有一個事件處理函數myPerformed。在發生事件的類裡面定義一個MyListener[]數組,用於存放監聽器。還要定義一個addMyListener()方法,方便別的組件注冊監聽器。最後在發生事件的地方遍歷MyListener數組,調用每一個元素的myPerformed(MyEvent e)方法即可!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved