Créer un événement personnalisé en Java


Je veux faire quelque chose comme ça en Java mais je ne connais pas le chemin:

Lorsque l'événement "l'objet 1 dit 'bonjour '" se produit, puis l'objet 2 répond à cet événement en disant "bonjour".

Quelqu'un Peut-il me donner un indice ou un exemple de code?

Author: JDJ, 2011-06-07

3 answers

Vous voulez probablement regarder dans le modèle d'observateur.

Voici un exemple de code pour vous lancer:

import java.util.*;

// An interface to be implemented by everyone interested in "Hello" events
interface HelloListener {
    void someoneSaidHello();
}

// Someone who says "Hello"
class Initiater {
    private List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }

    public void sayHello() {
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}

// Someone interested in "Hello" events
class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}

class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();  // Prints "Hello!!!" and "Hello there..."
    }
}

Article connexe: Java: Création d'un événement personnalisé

 379
Author: aioobe, 2017-06-03 15:58:20

Ce que vous voulez, c'est une mise en œuvre de la observateur modèle. Vous pouvez le faire vous-même complètement, ou utiliser des classes java comme java.util.Observer et java.util.Observable

 25
Author: Bozho, 2011-06-07 18:51:45

Il existe 3 façons différentes de configurer cela:

  1. Thrower à l'intérieur de Catcher
  2. Catcher à l'intérieur de Thrower
  3. Thrower et Catcher à l'intérieur d'une autre classe dans cet exemple Test

L'EXEMPLE DE TRAVAIL GITHUB QUE JE CITE Par défaut à l'option 3, pour essayer les autres, décommentez simplement le bloc de code "Optional " de la classe que vous voulez être principal, et définissez cette classe comme variable ${Main-Class} dans le fichier build.xml:

4 Les choses nécessaires pour lancer le code latéral:

import java.util.*;//import of java.util.event

//Declaration of the event's interface type, OR import of the interface,
//OR declared somewhere else in the package
interface ThrowListener {
    public void Catch();
}
/*_____________________________________________________________*/class Thrower {
//list of catchers & corresponding function to add/remove them in the list
    List<ThrowListener> listeners = new ArrayList<ThrowListener>();
    public void addThrowListener(ThrowListener toAdd){ listeners.add(toAdd); }
    //Set of functions that Throw Events.
        public void Throw(){ for (ThrowListener hl : listeners) hl.Catch();
            System.out.println("Something thrown");
        }
////Optional: 2 things to send events to a class that is a member of the current class
. . . go to github link to see this code . . .
}

2 Choses nécessaires dans un fichier de classe pour recevoir des événements d'une classe

/*_______________________________________________________________*/class Catcher
implements ThrowListener {//implement added to class
//Set of @Override functions that Catch Events
    @Override public void Catch() {
        System.out.println("I caught something!!");
    }
////Optional: 2 things to receive events from a class that is a member of the current class
. . . go to github link to see this code . . .
}
 20
Author: GlassGhost, 2014-09-06 20:13:50