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