2016-03-19 92 views
-1

你好嗎?擴展MouseAdapter並實現ActionListener

我要問你,爲什麼當我們寫一個事件處理我們寫

專用類延伸MouseAdapter實現的ActionListener

我的意思是,爲什麼有MouseAdapter延伸,並與ActionListener的工具,是事如果它成爲擴展的ActionListener實現MouseAdapter

謝謝

回答

0

的ActionListener只有一個方法。 MouseListener有很多方法。所以,你可以實現MouseListener,但是你需要實現它的所有方法,即使你只想處理單個事件類型(比如mouseClicked)。

MouseAdapter是一個實現MouseListener的類,並通過執行...來實現其所有方法。所以擴展MouseAdapter很方便:它只允許覆蓋感興趣的方法。創建一個ActionAdapter是沒有意義的,因爲它會包含一個單一的方法,你總是需要重寫才能做一些有用的事情。

請注意,雖然有一個類處理鼠標事件和動作事件是一種設計氣味。聽衆應該關注單個任務:處理來自給定源的給定事件。

0

MouseAdapter和ActionListener的區別在於MouseAdapter是一個抽象類,而ActionListener是一個接口。在Java中實現了接口,並擴展了抽象類。

抽象類和接口可以實現類似的角色,但有一些關鍵的區別,我建議你查看文檔以瞭解更多信息。

MouseAdapter https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html 的ActionListener https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html

0

你不能寫

extends ActionListener implements MouseAdapter 
因爲 ActionListener

是一個界面,MouseAdapter不是。一個更好的問題是,爲什麼作者沒有寫

implements MouseListener, ActionListener 

和可能的答案是:

MouseAdapter是空的實現接口MouseListener其中定義了幾個事件方法。現在,如果您只想實現事件方法,例如mouseClicked,然後執行MouseListener強制您爲所有其他鼠標方法添加空實現。從MouseAdapter派生允許您只覆蓋特定的方法,使您的監聽器類更小。

現在使用Java 8定義默認方法的能力,像MouseListener這樣的接口應該確實具有空的默認實現,使MouseAdapter多餘。