JavaFX 事件處理



在 JavaFX 中,我們可以開發 GUI 應用程式、Web 應用程式和圖形應用程式。在這些應用程式中,每當使用者與應用程式(節點)互動時,就會發生一個事件。

例如,單擊按鈕、移動滑鼠、透過鍵盤輸入字元、從列表中選擇專案、滾動頁面都是導致事件發生的活動。

事件型別

事件可以大致分為以下兩類:

  • 前臺事件 - 那些需要使用者直接互動的事件。它們是由於使用者與圖形使用者介面中的圖形元件互動而生成的。例如,單擊按鈕、移動滑鼠、透過鍵盤輸入字元、從列表中選擇專案、滾動頁面等。

  • 後臺事件 - 那些不需要終端使用者互動的事件稱為後臺事件。作業系統中斷、硬體或軟體故障、計時器到期、操作完成都是後臺事件的示例。

JavaFX 中的事件

JavaFX 提供了對各種事件進行處理的支援。名為 Event 的類(位於 javafx.event 包中)是事件的基類。

其任何子類的例項都是一個事件。JavaFX 提供了各種各樣的事件。其中一些列在下面。

  • 滑鼠事件 - 當單擊滑鼠時發生的輸入事件。它由名為 MouseEvent 的類表示。它包括滑鼠單擊、滑鼠按下、滑鼠釋放、滑鼠移動、滑鼠進入目標、滑鼠退出目標等操作。

  • 鍵盤事件 - 指示在節點上發生的擊鍵的輸入事件。它由名為 KeyEvent 的類表示。此事件包括按鍵按下、按鍵釋放和按鍵輸入等操作。

  • 拖動事件 - 當拖動滑鼠時發生的輸入事件。它由名為 DragEvent 的類表示。它包括拖動進入、拖動放下、拖動進入目標、拖動退出目標、拖動經過等操作。

  • 視窗事件 - 與視窗顯示/隱藏操作相關的事件。它由名為 WindowEvent 的類表示。它包括視窗隱藏、視窗顯示、視窗隱藏、視窗顯示等操作。

事件處理

事件處理是控制事件並決定如果事件發生應該發生什麼的機制。此機制包含稱為事件處理程式的程式碼,該程式碼在事件發生時執行。

JavaFX 提供了處理程式和過濾器來處理事件。在 JavaFX 中,每個事件都有:

  • 目標 - 事件發生的節點。目標可以是視窗、場景和節點。

  • - 生成事件的源將是事件的源。在上例中,滑鼠是事件的源。

  • 型別 - 發生的事件型別;對於滑鼠事件而言,滑鼠按下、滑鼠釋放是事件型別。

假設我們有一個應用程式,其中包含一個圓形以及停止和播放按鈕(使用組物件插入):

Sample Application

如果單擊播放按鈕,則源將是滑鼠,目標節點將是播放按鈕,生成的事件型別是滑鼠單擊。

JavaFX 中事件處理的階段

每當生成事件時,JavaFX 都會經歷以下階段。

路由構建

每當生成事件時,事件的預設/初始路由都透過構建 事件分發鏈 來確定。它是從舞臺到源節點的路徑。

以下是當我們在上例中單擊播放按鈕時生成的事件的分發鏈。

Play Button

事件捕獲階段

構建事件分發鏈後,應用程式的根節點將分派事件。此事件將傳播到分發鏈中的所有節點(從上到下)。如果這些節點中的任何一個為生成的事件註冊了過濾器,則將執行該過濾器。如果分發鏈中的任何節點都沒有為生成的事件註冊過濾器,則它將傳遞到目標節點,最後目標節點處理事件。

事件冒泡階段

在事件冒泡階段,事件從目標節點傳播到舞臺節點(從下到上)。如果事件分發鏈中的任何節點為生成的事件註冊了處理程式,則將執行該處理程式。如果這些節點都沒有處理程式來處理事件,則事件將到達根節點,最後過程將完成。

事件處理程式和過濾器

事件過濾器和處理程式包含用於處理事件的應用程式邏輯。一個節點可以註冊多個處理程式/過濾器。對於父子節點,可以為父節點提供一個通用的過濾器/處理程式,該過濾器/處理程式將作為所有子節點的預設值進行處理。

如上所述,在事件發生期間,處理器是一個被執行的過濾器,並且在事件冒泡階段,一個處理程式被執行。所有處理程式和過濾器都實現了包 **javafx.event** 中的介面 **EventHandler**。

廣告