Java Swing中處理各組件事件的一般步驟是:
1. 新建一個(gè)組件。
2. 將該組件添加到相應(yīng)的面板。
3. 注冊(cè)監(jiān)聽(tīng)器以監(jiān)聽(tīng)事件源產(chǎn)生的事件
4. 定義處理事件的方法。
注冊(cè)事件我們一般采用兩種方式:一是:利用一個(gè)監(jiān)聽(tīng)器以及多個(gè)if語(yǔ)句來(lái)決定是哪個(gè)組件產(chǎn)生的事件;二是使用多個(gè)內(nèi)部類來(lái)響應(yīng)不同組件產(chǎn)生的各種事件,它又分兩種方式,一種是采用匿名內(nèi)部類,一種是采用一般內(nèi)部類。
下面我們采用以上三種方式來(lái)注冊(cè)事件。來(lái)說(shuō)明以上三種方式是如何實(shí)現(xiàn)事件的處理方法。
一、采用一個(gè)監(jiān)聽(tīng)器多個(gè)if語(yǔ)句來(lái)實(shí)現(xiàn)
利用一個(gè)監(jiān)聽(tīng)器來(lái)處理事件的缺點(diǎn)是:其實(shí)當(dāng)處理的事件比較少的時(shí)候,這種方式還是一種比較好的方式,它簡(jiǎn)單。當(dāng)程序比較復(fù)雜時(shí),需要一大串的if語(yǔ)句來(lái)實(shí)現(xiàn)。程序的代碼比較難閱讀和維護(hù)。
二、利用匿名內(nèi)部類來(lái)是實(shí)現(xiàn)
使用匿名內(nèi)部類來(lái)實(shí)現(xiàn)可以解決使用if來(lái)獲取事件源帶來(lái)的麻煩。但是使用匿名內(nèi)部類同樣存在著一些問(wèn)題。由于它是和事件組一起的。根據(jù)事件組在代碼中的位置不同,類的定義以及處理事件,同樣不便于閱讀。如果事件處理程序比較復(fù)雜,內(nèi)部類中的代碼就會(huì)變的很長(zhǎng)。
三、利用一般內(nèi)部類來(lái)實(shí)現(xiàn)
利用一般內(nèi)部類我們可以解決很多的問(wèn)題,該方法避免了第二種方法中由于使用匿名內(nèi)部類而導(dǎo)致的代碼混亂。它把所有的事件處理方法都集中在一塊,并且都具有有意義的名稱,程序非常容易閱讀與維護(hù)。單個(gè)的事件處理程序也可以被工具欄、菜單欄等重復(fù)使用?;谏厦娴目偨Y(jié),我們一般采用第三種方法來(lái)注冊(cè)事件。