2016-03-19 8 views
-1

どうですか?MouseAdapterを継承し、ActionListenerを実装します

私たちは、イベント処理を記述するときに我々は

プライベートクラスAはMouseAdapterのはMouseAdapterのが伸びるとのActionListenerを実装して、それが問題ですなぜ私が何を意味するかのActionListener

が実装拡張書く理由をお聞きしたいですそれはのActionListenerがMouseAdapterの

を実装して拡張になっている場合

答えて

0

のActionListenerは、単一のメソッドを持っているあなたに感謝。 MouseListenerには多くのメソッドがあります。したがって、MouseListenerを実装できますが、単一のイベントタイプ(mouseClickedなど)を処理したい場合でも、すべてのメソッドを実装する必要があります。

MouseAdapterは、MouseListenerを実装するクラスであり、何もしないことですべてのメソッドを実装します。 MouseAdapterを拡張することは便利です。関心のあるメソッドだけをオーバーライドすることができます。 ActionAdapterの作成には、単一のメソッドが含まれているため、何か有用なことを行うために常にオーバーライドする必要があるため、何の意味もありません。

ただし、マウスイベントとアクションイベントの両方を単一のクラスハンドルで処理することは、デザインの匂いであることに注意してください。リスナーは、特定のソースから特定のイベントを処理するという1つのタスクに集中する必要があります。

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

ActionListenerはインタフェースであり、MouseAdapterではないので、あなたは

extends ActionListener implements MouseAdapter 

を書き込むことはできません。著者は

implements MouseListener, ActionListener 

を書いていない理由を、より良い質問があり、おそらく答えは次のとおりです。

MouseAdapterは、いくつかのイベントメソッドを定義するインタフェースMouseListenerの空の実装です。イベントメソッドでのみ実装する場合は、 mouseClickedの場合、MouseListenerを実装すると、他のすべてのマウスメソッドに対して空の実装を追加する必要があります。 MouseAdapterから派生すると、特定のメソッドをオーバーライドするだけで、リスナークラスを小さくすることができます。

デフォルトのメソッドを定義するJava 8の機能では、MouseListenerのようなインターフェイスは実際には空のデフォルトの実装を持つべきなので、MouseAdapterは不要です。