

これまでは、あまり深く考えず、何かのイベントを検知する際は、EventListenerをimportすればいいと考えておりました。

しかし、EventListenerの内部的な処理がどうしても気になり、調べております。

以下のようなページなどはあるものの、内部的な処理まではわかりませんでした。

<https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/events/EventListener.html#handleEvent(org.w3c.dom.events.Event)>

EventListenerのhandleEventメソッドで色々と処理をしているのかと思われますが、  
handleEventのソースコードを見ることはできないのでしょうか？

javaを例に上げておりますが、必ずしもjavaでなくても構いません。

宜しくお願いします。


CC BY-SA 3.0
2016-04-17T12:21:27.707
24093
2016-04-19T04:42:18.233
2016-04-19T04:42:18.233
10292
13175
question
java scala
EventListenerをimportするだけでなぜ、クリックイベントを検出できるのか、内部的な処理がよくわかりませんでした。


> EventListener#handleEventのソースコード

JDKをダウンロード、インストールして、例えば`C:\Program
Files\Java\jdk1.8.0_77\src.zip`を展開すれば、`src\org\w3c\dom\events\EventListener.java`を見ることができますが、[Document
Object Model Events](https://www.w3.org/TR/2000/REC-DOM-
Level-2-Events-20001113/events.html)の`EventListener`はインターフェイスなので`handleEvent`メソッドは宣言のみです。

> 何かのイベントを検知する際は、EventListenerをimport ...  
>  ...  
>  EventListenerの内部的な処理...

については、求めているものがよくわかりません。通常リスナの実装はイベントを受け取る側(ユーザなど)が、例えば`javascript`なら以下のような感じで作成するのではないでしょうか。

[code]

    node.addEventListener("click", function(e) {
      log("click!");
    }, false);
    
[/code]

そういう意味ではなく、これらの`EventListener`がイベント処理システム内部でどのように扱われているか(イベントを発生するオブジェクト側での内部処理)が知りたいのなら、`com/sun/org/apache/xerces/internal/dom/DocumentImpl.java`などが参考になりそうです。

  * `DocumentImpl#addEventListener(...)`でリスナが登録される
  * `DocumentImpl#dispatchEvent(...)`メソッド内で`EventListener#handleEvent()`が呼ばれる

> javaを例に上げておりますが、必ずしもjavaでなくても構いません。

一般的なUIのイベント処理について知りたい場合は、[Observer パターン -
Wikipedia](https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)あたりから調べる方が簡単かもしれません。


CC BY-SA 3.0
2016-04-18T13:37:39.943
24121
2016-04-18T13:37:39.943
46
24093
answer