點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程第十三章匯總
13.2 事件處理過(guò)程
要管理用尸與程序中建立的GUI組件的交互操作,我們就必須懂得在Java事件是如何處理的。為了獲得有關(guān)的概念,讓我們考察一個(gè)特別的例了。請(qǐng)不要為這里眾多的類名以及其他的細(xì)節(jié)問(wèn)題而擔(dān)心。只要你從中感受到各項(xiàng)操作是如何連接在一起的就足夠了。
假設(shè)用戶點(diǎn)擊程序GUI中的按鈕,這個(gè)按鈕就是事件的源。由于點(diǎn)擊鼠標(biāo)產(chǎn)生的事件與程序中描述屏幕上按鈕的JButton對(duì)象關(guān)聯(lián)。在按鈕被點(diǎn)擊時(shí),應(yīng)用程序?qū)⒔⒁粋(gè)新對(duì)象來(lái)描述并標(biāo)識(shí)這個(gè)事件,在本例中是一個(gè)ActionEvent類型的對(duì)象。它將包含有關(guān)事件與事件源的信息。傳遞給Java程序的任何事件都由一個(gè)特定的事件對(duì)象標(biāo)識(shí),這個(gè)對(duì)象將作為變量傳遞給處理事件的方法。
點(diǎn)擊按鈕的事件對(duì)象將傳遞給預(yù)先已經(jīng)注冊(cè)為對(duì)這類事件感興趣的監(jiān)聽(tīng)對(duì)象,監(jiān)聽(tīng)對(duì)象是一個(gè)監(jiān)聽(tīng)特殊事件的簡(jiǎn)單對(duì)象。監(jiān)聽(tīng)器又稱為事件的目標(biāo)。這里"傳遞事件給監(jiān)聽(tīng)器"意味著事件源調(diào)用監(jiān)聽(tīng)對(duì)象中的一個(gè)特定方法,并把事件對(duì)象作為自變量傳遞給它。一個(gè)監(jiān)聽(tīng)對(duì)象可以監(jiān)聽(tīng)一個(gè)人特定對(duì)象的時(shí)間,比如一個(gè)按鈕,也可以監(jiān)聽(tīng)?zhēng)讉(gè)不同對(duì)象的事件,比如一組菜單項(xiàng)。采用哪種方式將依據(jù)你的操作需求以及從程序設(shè)計(jì)的角度看哪種方法更簡(jiǎn)便。在程序中常常包含這兩種形式。
如何定義一個(gè)監(jiān)聽(tīng)器呢?你可以他、讓類實(shí)現(xiàn)監(jiān)聽(tīng)接口來(lái)建立任何類對(duì)象的監(jiān)聽(tīng)對(duì)象。監(jiān)聽(tīng)接口的種類很多,一邊迎合不同種類的事件,在點(diǎn)擊按鈕這個(gè)例子中,我們需要實(shí)現(xiàn)ActionLisrener接口以接收來(lái)自按鈕的事件。接收這個(gè)對(duì)象以及應(yīng)答事件的代碼被實(shí)現(xiàn)在監(jiān)聽(tīng)接口中聲明的方法內(nèi)。在我們的例子中,當(dāng)事件發(fā)生時(shí),ActionLisrener接口中的actionPerformed方法將被調(diào)用,并且事件對(duì)戲作為自變量傳遞給它。每種監(jiān)聽(tīng)接口都定義了監(jiān)聽(tīng)器已經(jīng)設(shè)計(jì)好的用來(lái)處理所接收的事件的特定方法。
要把監(jiān)聽(tīng)對(duì)象連接到一個(gè)事件源上只簡(jiǎn)單地實(shí)現(xiàn)一個(gè)監(jiān)聽(tīng)接口是不夠的。你還必須把監(jiān)聽(tīng)器連接到你想要處理事件的一個(gè)源或多個(gè)源上。你可以通過(guò)調(diào)用源對(duì)象中的一個(gè)特殊方法注冊(cè)一個(gè)監(jiān)聽(tīng)對(duì)象,此處我們將調(diào)用JButton對(duì)象的addActionListener()方法,并且把監(jiān)聽(tīng)對(duì)象作為自變量傳遞給它。
這種利用監(jiān)聽(tīng)器處理事件的技術(shù)非常靈活、有效。特別是對(duì)GUI事件。對(duì)歌監(jiān)聽(tīng)器可以接收一種特殊的事。然而一種特殊的事件只能傳遞給已經(jīng)注冊(cè)接收它的監(jiān)聽(tīng)器,因此只能有對(duì)他感興趣的部分才給予響應(yīng)。由于一個(gè)監(jiān)聽(tīng)器只需要實(shí)現(xiàn)一套相應(yīng)的接口,實(shí)際上你可以在你喜歡的任何位置接收和處理事件。在Java中使用監(jiān)聽(tīng)對(duì)象處理事件的方法被稱為授權(quán)事件模型(delegation event model).這是因?yàn)轫憫?yīng)發(fā)源于組件(如按鈕或菜單項(xiàng))
正像你所知道的,這不是一張很完整的低級(jí)的事件類列表,它只是一張你需要知道的事件列表。正如,有一個(gè)PaintEvenr類,他/它與在屏幕上繪制組件的操作有關(guān),還有另外一個(gè) 低級(jí)事件類ContainerEvent,它定義了與容器相關(guān)的事件,比如添加或刪除組件,由于這些事件被自動(dòng)地處理,所以你可忽略它們。
這些類中的每一個(gè)類都定義了使你能夠分析事件的方法,比如,MouseEvevnt型對(duì)象,在事件發(fā)生時(shí)可以得到光標(biāo)的坐標(biāo)。這些低級(jí)事件類還有從他們的超類繼承了方法,其關(guān)系顯示在下面的示意圖中:
相關(guān)推薦:
2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |