Javaイベント処理メカニズム
Javaのイベントメカニズムの参加者には3つの役割があります。
1.Eventオブジェクト:パラメーターとして対応するリスナーの方法で使用されるイベント状態オブジェクトは、一般にリスナー方法に存在します。
2.Eventソース:特定のイベントソース。たとえば、ボタンをクリックすると、ボタンがイベントソースです。特定のイベントにボタンを返信する場合は、特定のリスナーを登録する必要があります。
3.Eventリスナー:それに応じて、各クリアイベントが発生するために、それに応じて明確なJavaメソッドを定義します。これらの方法は、Java.util.eventListenerを継承する必要があるイベントリスナー(EventListener)インターフェイスで中央に定義されています。イベントリスナーインターフェイスの一部またはすべての方法を実装するクラスは、イベントリスナーです。
イベントが発生すると、対応する状態は通常、java.util.eventobjectから継承する必要があるイベント状態オブジェクトにカプセル化されます。イベントステータスオブジェクトは、イベントに応答するはずの単一のパラメーターとしてリスナーメソッドに渡されます。特定のイベントを発行するイベントソースのIDは、指定されたデザイン形式に従ってイベントリスナーの登録方法を定義し、指定されたイベントリスナーインターフェイスインスタンスへの参照を受け入れます。
特定のリスニングイベントクラスの場合、イベントオブジェクトを聴くと、対応するメソッドを呼び出して処理します。
JDKが提供するイベントパッケージを見てみましょう。
パブリックインターフェイスEventListener:すべてのイベントリスナーインターフェイスを拡張する必要があるというタグインターフェイス。
Public Class EventObjectは、オブジェクトを拡張してシリアル化可能です
すべてのイベント状態オブジェクトは、それらがあるルートクラスを導き出します。すべてのイベントは、構築されたときにオブジェクト「ソース」を参照します。これは、イベントについて最初に発生するオブジェクトであると論理的に考慮されます。
(1)EventObjectを継承するDoorevent.javaファイルを介してDooreventクラスを作成します。
/***イベントオブジェクトを定義するには、EventObjectを継承する必要があります*/public class doorevent extends eventObject {private static final long serialversionuid = 6496098798146410884l; Private String DoorState = ""; //ドアのステータスを示します。パブリックドアベントには2つのタイプがあります(オブジェクトソース、文字列DOORSTATE){super(source); this.doorstate = doorstate; } public void setDoorState(String DoorState){this.DoorState = Doorstate; } public string getDoorState(){return this.doorstate; }}(2)EventListenerから継承される新しいイベントリスニングインターフェイスを定義します。このインターフェイスには、Dooreventイベントのハンドラーが含まれています。
/*** dooreventイベントを聴く責任を負うリスニングインターフェイスを定義します*/publicインターフェイスdoorlistener extends eventener {public void doorevent(doorevent event);}上記のインターフェイスを通じて、リスニング機能とイベント処理機能を具体的に実装するイベントリスニングクラスを定義します。
/***このクラスはドア1リスニングインターフェイスを実装し、特定のドアの開閉アクションを実行します*/パブリッククラスのドアリステナー1はdoorListener {@Override public void doorevent(doodorevent event){// todo auto-eneratedメソッドスタブif(event.getdoorstate() system.out.println( "door1 open"); } else {system.out.println( "door1 closed"); }}}/***このクラスは、ドア2のリスニングインターフェイスを実装します。これにより、特定のドアの開口部、ドアクロージング、ライトオープニングおよびライトクロージングアクションが実行されます*/public class doorlistener2は、ドアリステナー{@Override public void doorevent(doorevent event){// todo auto-jerated method stub if(event.getododstate()! event.getDoorState()。equals( "open")){system.out.println( "door2が開き、廊下のライトを同時にオンにします"); } else {system.out.println( "door2が閉じ、廊下の光を同時にオンにします"); }}}(3)Doormanager.javaを介してイベントソースクラスを作成します。これは、コレクションリスナーオブジェクトを使用してすべてのイベントリスナーオブジェクトを保存します。ストレージ方法は、addDoorListener(..)を介して行われます。 NotifyListeners(..)は、システムを通知するために使用されるイベントをトリガーする方法です。イベントが発生し、対応する処理関数を呼び出すことができます。
/***イベントソースオブジェクト、ここでは、ドアの開閉を制御するリモートコントロールとして想像できます*(スイングしている場合、ボタンに似ています)*/public class doormanager {private collectionリスナー。 / ** *イベントの追加 * * @paramリスナー * doorlistener */ public void adddoorListener(doorlistenerリスナー){if(ristens == null){ristens = new Hashset(); }リスナー.add(リスナー); } / ** *イベントを削除 * * @paramリスナー * DOORLISTENER * / public void remodevedOorListener(doorListenerリスナー){if(ristens == null)return; listens.remove(リスナー); } / ***ドアオープニングイベントをトリガー* /保護されたvoid fireworkspaceoped(){if(ristens == null)return; doorevent event = new doorevent(this、 "open"); NotifyListeners(イベント); } / ***ドアクロージングイベントをトリガー* /保護されたvoid fireworkspaceClosed(){if(ristens == null)return; doorevent event = new doorevent(this、 "close"); NotifyListeners(イベント); } / ** *すべてのDOORLISTENERSを通知 * / private void notifyListeners(doorevent event){iterator iter = ristens.iterator(); while(iter.hasnext()){doorlistenerリスナー=(doorlistener)iter.next(); listener.doorevent(event); }}}(4)大丈夫、最終的にカスタマイズされたイベントをテストするテストプログラムを作成します。このプログラムは理解するのが難しくないはずです:)
/***メインプログラムは、ドアを開けたい人として想像されます*/public class doormain {public static void main(string [] args){doormanager manager = new doormanager(); Manager.AdddoorListener(new DoorListener1()); //リスナーをドア1に追加します。 system.out.println( "I've Come In"); // close manager.fireworkspaceclosed(); }}doormainを実行します
ドア1が開くドア2が開き、廊下にライトが開きます
入ってきました
ドア1閉じるドア2は閉じ、廊下のライトを閉じます
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!