2014-07-17 78 views
1

我一直在搜索Java的文檔,以瞭解消耗是什麼,但我不明白他們提供的解釋。我不明白是什麼消耗()

例如,MouseEvent類包含方法consume()。 Java文檔聲明:consume():「消耗此事件,以便它不會由源自它的源以默認方式處理。」

在下面的段落中,它們提供了一個消耗()函數的示例: 輸入事件在它們源自其來源通常處理之前會傳遞給偵聽器。這允許偵聽器和組件子類「消耗」事件,以便源不會以默認方式處理它們。例如,在Button組件上使用mousePressed事件將會阻止Button被激活。

如果我理解正確,通常一旦在Button組件上發生了像'mousePressed'這樣的事件,該按鈕應該被激活。但是通過調用事件上的消耗,組件(包含偵聽器)將不會響應,因爲事件在它到達組件之前已被使用或銷燬?因此,組件甚至沒有機會以「默認方式」進行處理?

謝謝你的幫助。

+1

消費一個事件只會影響尚未被調用的可能偵聽器,因此如果第一個偵聽器使用該事件,則不會再通知已註冊的偵聽器。這假設事件/偵聽器的處理支持這個功能 – MadProgrammer

回答

4

基本上,可能有一些對象正在「傾聽」這個MouseEvent-並且Java以相反的順序告訴每個對象它們被註冊爲監聽器,事件發生。

通過調用event.consume(),你告訴Java來停止告訴其他聆聽該事件發生,所以如果你的聽衆是第一個接收事件(例如,最後一個用於註冊事件) ,其他聽衆也不會知道即使發生了MouseEvent,包括任何負責該按鈕點擊的人。