Java 中的事件處理:那是什麼以及它是如何工作的?
已發表: 2020-03-21任何基於圖形用戶界面或 GUI 的程序,包括用於 Windows 的 Java 應用程序,都是由事件驅動的。 對於像 Java 應用程序這樣有用的程序,需要對來自用戶的命令或輸入提供響應。 Java 應用程序具有捕獲用戶操作的事件。 在討論 Java 中的事件處理之前,讓我們從討論事件開始。
目錄
什麼是事件?
事件在每種編程語言中都具有相同的含義和重要性。 它們是由用戶控制的外部效果,使您的應用程序的行為符合預先定義的條件,以記錄其對不同用戶操作的響應。 一個事件甚至可以被稱為一個對象,當 GUI 內發生更改時,該對象就會生機勃勃。
Java 中的事件示例包括輸入字符或文本、單擊組合框、單擊按鈕或來自用戶的任何其他操作。 任何此類操作都會觸發一個事件,然後會導致創建與該事件相關的事件對象。
例如,如果用戶輸入一些數據(觸發事件的用戶操作),應用程序會通過彈出對話框或顯示信息(事件對象)來生成輸出。 這些與事件相關的行為是 Java 事件處理機制的一部分,並且存在於 Swing GUI 庫中。 需要注意的是,每個事件的源和事件偵聽器都必須鏈接。 如果不是這種情況,事件的觸發將不會產生任何動作。
為什麼程序或應用程序需要事件驅動?
在事件處理出現之前,程序必須自己收集所有用戶信息,以了解它在給定時間點正在做什麼。 這意味著在運行或初始化之後,程序總是處於等待用戶做某事的大循環中。
因此,該程序正在尋找任何動作——從按下按鈕到滑塊移動。 在它知道用戶方面發生了某些事情后,它準備自己提供適當的響應。 這稱為輪詢。 儘管輪詢可以完成工作,但通常情況下,它會被認為是一項太難以管理且耗時的任務。

閱讀: Java 開發人員面試問答
如果我們考慮將它用於現代應用程序,它並不真正符合要求。 兩個主要原因使輪詢不適合現代應用程序 - 輪詢將所有與事件相關的代碼放入大重複循環中,並且在此位置內發生的交互過於復雜。 此外,輪詢使程序進入一個永無止境的循環,這會導致 CPU 週期耗盡,而無法保證來自用戶的操作。
Abstract Window Toolkit 或 AWT 已經向前推進,並與解決上述問題的不同工作模型建立了聯繫。 這種新模型是事件驅動的編程。 使用 AWT,程序就無需尋找用戶生成的事件。 完成這項工作的是 Java 運行時。 一旦事件發生,它就會提示程序。 它可以節省寶貴的資源,並更好地處理用戶交互。
什麼是 Java 中的事件處理程序以及它們如何工作?
現在讓我們討論我們著手處理的主要主題。 Java 中的事件處理是如何工作的?
如前所述,事件是使應用程序以某種方式運行的用戶操作或外部效果。 在 Java 中,AWT 組件(包括文本框、按鈕等)負責事件的生成。 一旦生成事件,偵聽器就會處理它並執行適當的操作。

Java 中的事件處理包括四個元素。 這些甚至可以稱為事件處理程序。
1.事件源:產生事件的事件源多為AWT組件。 您可以運行java.awt.component命令來了解在生成事件中可能起或不起任何作用的組件。 組件是原始源類的子類。 事件源可以是任何東西,從文本框和組合框到按鈕等等。
閱讀: Java 中的 MVC 架構
2. 事件類:在 Java 中,這些類幾乎涵蓋了與事件生成有關的所有組件。 這些也稱為事件類型。 以下是一些最常見的事件類:
- ActionEvent :此事件類或事件類型表示涉及單擊圖形元素(例如按鈕或列表項)的事件。 與該類相關的監聽器是 ActionListener。
- KeyEvent :此事件類表示涉及按下和釋放鍵的事件。 與此類關聯的偵聽器是 KeyListener。
- ContainerEvent :此事件類型表示發生在 GUI 容器中的事件。 此類與用戶操作涉及從 GUI 添加或刪除對象的任何事件相關聯。 這個類的相關監聽器是 ContainerListener。
- MouseEvent :這個類代表所有那些涉及點擊或按下鼠標的事件。 此類的偵聽器是 MouseListener。
- WindowEvent :此事件類或類型表示涉及與窗口相關的任何操作的事件。 關閉、激活或停用窗口屬於此類。 此類的相關偵聽器是 WindowListener。
3. 事件監聽器:這些是 Java 的接口,提供了可以在不同實現的類中使用的各種方法。 事件偵聽器的工作涉及偵聽事件,然後在事件發生時對其進行適當處理。 幾乎 Java 中的每個組件都有一個專用的偵聽器來處理該組件生成的任何事件。 ActionListener 處理涉及列表、按鈕、文本字段和菜單的事件。
4. 事件適配器:如果一個程序提供了太多的抽象方法讓監聽器覆蓋,編譯起來會很困難。 例如,如果我們想關閉一個框架,我們需要重寫七個 WindowListener 抽象方法。 為了減少複雜性和繁重的編碼,Java 有事件適配器。 事件適配器已經是被覆蓋的抽象方法。
結論
重要的是要記住多個事件源和偵聽器可以相互交互。 因此,屬於同一類的多個事件可以由單個偵聽器處理。 這意味著一個偵聽器可以處理所有涉及執行類似操作的相同組件的事件。 在類似的行中,一個事件可以由多個偵聽器處理,前提是程序的設計允許這樣做。

說得通?
是的?
不?
與我們聯繫以了解有關 Java 事件處理的廣泛會議。 你不會後悔的!
如果您有興趣了解有關 Java 用於 Web 開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為在職專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和作業, IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。