マウスイベントリスナーを登録したい場合の処理では、「mousepressed」、「mousereleased」などの名前で関数を定義するだけで、「魔法のように」イベントリスナーになります。これは、私が使用している controlP5 ライブラリでも発生します。ここでは、コントロール ウィジェットにちなんで名付けられたすべての関数が「魔法のように」そのイベント ハンドラーになります。Javaはこの種の魔法をどのように処理するのだろうか? このパターンに関するソース コードまたはトピックはどこで確認できますか。メインアプレットでリスナーを定義できないので、そのメカニズムを知りたいです。
1 に答える
処理にはリフレクションを使用するものもありますが、mousePressed() 関数の場合、それは単純な継承の問題です。
Processing には PApplet クラスが含まれており、そのソースはhttps://github.com/processing/processing/blob/master/core/src/processing/core/PApplet.javaで確認できます。
この回答の時点で、PApplet クラスの 3087 行目は、イベント ハンドラーを介して呼び出される mousePressed(MouseEvent) 関数です。 /イベント/
この mousePressed(MouseEvent) メソッドは、引数なしの mousePressed() 関数を呼び出します。これは、3084 行目の空の関数です。
Processing スケッチを作成するときは、PAppletをこっそりと拡張していることになります。スケッチに mousePressed() 関数を記述するときは、PApplet クラスの空の mousePressed() 関数をオーバーライドします。PApplet クラスが MouseListener から MouseEvent を取得すると、 mousePressed 関数が呼び出されます。それが継承の仕組みです。
より具体的な質問をしている場合は、話している内容を正確に示すMCVEを提供してください。