Mécanisme de manipulation des événements Java
Il y a 3 rôles pour les participants au mécanisme d'événements en Java:
1. EVENT Objet: Objet d'état d'événement, utilisé dans les méthodes correspondantes de l'écoute, en tant que paramètres, existe généralement dans la méthode de l'écoute.
2.Event Source: la source d'événement spécifique. Par exemple, si vous cliquez sur un bouton, le bouton est la source d'événement. Si vous souhaitez que le bouton réponde à certains événements, vous devez enregistrer un auditeur spécifique.
3. ÉVITEUR ÉVENTISSE: Définissez une méthode Java claire en conséquence pour l'occurrence de chaque événement clair. Ces méthodes sont définies de manière centralisée dans l'interface de l'écoute d'événements (EventListener), qui doit hériter de Java.util.EventListener. La classe qui implémente certaines ou toutes les méthodes de l'interface d'écoute d'événements est l'écouteur d'événements.
Au fur et à mesure que les événements se produisent, l'état correspondant est généralement encapsulé dans l'objet de l'état d'événement, qui doit être hérité de java.util.eventObject. L'objet d'état de l'événement est passé en tant que paramètre unique à la méthode de l'écoute qui devrait répondre à l'événement. L'identité de la source d'événements qui émet un événement particulier est: définit la méthode d'enregistrement pour l'écouteur d'événements conformément au format de conception spécifié et accepte les références à l'instance d'interface d'écoute d'événements spécifiée.
Pour une classe d'événements d'écoute spécifique, lorsqu'il écoute l'objet Event, il appelle la méthode correspondante et la traite.
Jetons un coup d'œil au package de l'événement fourni par JDK:
Interface publique EventListener: l'interface de balise que toutes les interfaces d'écoute d'événements doivent être étendues.
classe publique EventObject étend l'objet implémente sérialisable
Tous les objets d'état d'événement dériveront la classe racine à partir de laquelle ils sont. Tous les événements font référence à l'objet "source" lorsqu'il est construit, qui est logiquement considéré comme l'objet qui se produit initialement sur l'événement.
(1) Créez la classe Doorevent via le fichier doorevent.java, qui hérite de l'événement.
/ *** Pour définir un objet d'événement, vous devez hériter de EventObject * / public class doorevent étend EventObject {private static final long SerialVersionUID = 6496098798146410884l; String Private String Stand = ""; // indique le statut de la porte, il existe deux types de doorevent public (source d'objet, String Norytate) {super (source); this.Doerstate = Nattertate; } public void SetDoOrState (String Standate) {this.DoOrState = Doorstate; } public String getDoOrState () {return this.DoOrState; }}(2) définir une nouvelle interface d'écoute d'événements, qui est héritée de EventListener; Cette interface contient un gestionnaire pour les événements Doorevent:
/ *** Définissez l'interface d'écoute, responsable de l'écoute des événements Doorevent * / interface publique DoorListener étend EventListener {public void doorevent (événement Doorevent);}Grâce à l'interface ci-dessus, nous définissons les cours d'écoute d'événements, qui implémentent spécifiquement la fonction de fonction d'écoute et de gestion des événements.
/ *** Cette classe implémente l'interface de la porte 1 à l'écoute et effectue des actions spécifiques d'ouverture et de clôture de porte * / classe publique DoorListener1 implémente DoorListener {@Override public void Doorevent (Dooorevent Event) {// Todo Auto-généré Méthode Stub if (event.getDoorstate ()! = Null && event.getDootres (). ouvrir"); } else {System.out.println ("Door1 fermé"); }}} / *** Cette classe implémente l'interface d'écoute de la porte 2, qui effectue une ouverture de porte, une fermeture de porte et des actions de clôture de lumière et de la classe publique / une classe publique) {// Méthode @Override public Void Doorevent (Doorevent Event) {// TODO Auto-Generated Method Stub if (event.getDooState ()! = Null && event.getDoorState (). {System.out.println ("Door2 s'ouvre, allumant la lumière dans le couloir en même temps"); } else {System.out.println ("Door2 se ferme, allumant la lumière dans le couloir en même temps"); }}}(3) Créez une classe Source d'événements via DoorManager.Java, qui utilise un objet d'écoute de collection pour stocker tous les objets d'écoute d'événements. La méthode de stockage est via addDoorListener (..). NotifyListeners (..) est une méthode qui déclenche un événement, qui est utilisé pour informer le système: l'événement s'est produit, et vous pouvez appeler la fonction de traitement correspondante.
/ *** Objet de source d'événement, vous pouvez l'imaginer comme une télécommande qui contrôle l'ouverture et la fermeture de la porte, * (si elle est en swing, elle est similaire à un bouton) * / Classe publique DoorManager {Écouteurs de collection privés; / ** * Ajouter l'événement * * @param écouteur * DoorListener * / public void addDoorListener (DoorListener écouteur) {if (auditeurs == null) {écouteurs = new hashSet (); } auditers.add (auditeur); } / ** * Supprimer l'événement * * @param écouteur * DoorListener * / public void supprimeorOorListener (DoorListener Écouteur) {if (auditeurs == null) return; auditeurs.remove (auditeur); } / ** * Déclenchez l'événement d'ouverture de la porte * / Protected void Fireworkspaceopened () {if (auditeurs == null) return; DOOREvent Event = new Doorevent (this, "Open"); notifyListeners (événement); } / ** * Déclenchez l'événement de fermeture de la porte * / Protected void FireworkspaceClosed () {if (auditeurs == null) return; DOOREvent Event = new Doorevent (this, "close"); notifyListeners (événement); } / ** * Notifier tous les portes de portes * / private void notifyListeners (événement doorevent) {iterator iter = écouteurs.Iterator (); while (iter.hasnext ()) {DoorListener écouteur = (DoorListener) iter.next (); auditeur.Doorevent (événement); }}}(4) D'accord, écrivez enfin un programme de test pour tester nos événements personnalisés. Ce programme ne devrait pas être difficile à comprendre :)
/ *** Le programme principal est imaginé comme qui souhaite ouvrir la porte * / classe publique DoorMain {public static void main (String [] args) {doorManager Manager = new DoorManager (); Manager.AddDoorListener (new DoorListener1 ()); // Ajouter l'auditeur à la porte 1 Manager.AddDoorListener (new DoorListener2 ()); // Ajouter l'auditeur à la porte 2 // Open Door Manager.fireWorkspaceOpened (); System.out.println ("Je suis venu"); // close manager.fireWorkspaceClosed (); }}Faire fonctionner le portier
La porte 1 ouvre la porte 2 s'ouvre, lors de l'ouverture des lumières dans le couloir
Je suis entré
La porte 1 ferme la porte 2 se ferme, tout en fermant les lumières du couloir
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!