2017-07-25 36 views
3

我是JavaFX的新手,看到有不同類型的事件處理程序。 JavaEvent中的MouseEvent,ActionEvent和Event有什麼區別?JavaFX中MouseEvent,ActionEvent和Event有什麼區別?

+0

您的問題被標記爲JavaFX 2,因爲您是JavaFX的新手,請確保您使用的是最新版本(當前是Java 8+),而不是過時的JavaFX 2版本。 – jewelsea

回答

3

Event是所有事件類型的超類。

樣本事件類型有:

  • KeyEvents其中,當按下一個鍵產生的。
  • MouseEvents這是通過鼠標交互生成的,例如移動或按鈕點擊。
  • 還有更多。

事件不一定只能由JavaFX系統生成。如果您願意,您可以發射和使用自己的custom events,但通常,大多數事件都是由JavaFX系統生成的。

ActionEvent是一種事件,通常可以更容易地編碼和響應被激活的內容。

通常會爲單個動作生成多個事件。例如,如果用鼠標單擊按鈕,除了ActionEvent之外,還可以獲得MOUSE_PRESSEDMOUSE_RELEASEDMOUSE_CLICKED事件。

如果你想響應按鈕激活,你可以聽一個MOUSE_CLICKED事件,但不建議這樣做。這是因爲還有其他方法可以激活按鈕,或者可以禁用按鈕,在這種情況下您不想對其執行操作。如果它是默認按鈕,則ENTER鍵可以觸發按鈕,或者當用戶按下按鈕時按下SPACE鍵可以激活該按鈕。當按鍵被鍵盤激活時,則沒有相關的鼠標事件,因此不建議監聽鼠標事件以進行鼠標激活。通常,您只想知道該按鈕已被激活,而不是導致該按鈕的原因,並且您不希望自己監控可能導致激活的所有事件類型,以及在事件觸發時實際發生激活的條件下。

JavaFX提供了ActionEvent,無論激活按鈕的方法如何,該按鈕都會被激活。這使您更容易編碼,因爲您需要編寫的所有內容都是button.setOnAction(event -> handleButtonAction());

一個ActionEvent也用於很多地方,例如在關鍵幀被激活時在動畫KeyFrame中創建特定類型的事件似乎不值得或不必要。所以ActionEvents不只是用來處理按鈕事件,而是可以在很多地方使用。