Zielony Smok - logo witryny

Generowanie (własnych) zdarzeń dziedziczących po EventObject – sposób 2

Sytuacja przedstawiona w poprzednim wpisie komplikuje się nieco, gdy musimy generować więcej niż jedno zdarzenie.

Klasa SmokEvent jest taka jak poprzednio. Dodatkowo generujemy klasę SmokEvent1.

Klasa SmokEvent1
package events4;
import java.util.*;
class SmokEvent1 extends EventObject {
    private static final long serialVersionUID = 4133048828738474610L;
    public SmokEvent1(Smok source) {
        super(source);
    }
}

Od klasy SmokEvent różni się jedynie nazwą.

Klasa SmokListener wygląda nieco inaczej.>/

Klasa SmokListener
package events4;
import java.util.*;
interface SmokListener extends EventListener {
    void smokZasnal(SmokEvent e);
    void smokObudzilSie(SmokEvent1 e);
}

Klasa Smok nieco różni się od poprzedniej.

Klasa Smok
package events4;
import java.util.*;
class Smok {
    private static final long serialVersionUID = 5496971741095724065L;
    private final Vector<SmokListener> listeners = new Vector<>();
    public Smok() {
    }
    @SuppressWarnings("unchecked")
    public void uspijSmoka() {
        Vector<SmokListener> v = (Vector<SmokListener>) listeners.clone();
        SmokEvent event = new SmokEvent(this);
        Enumeration<SmokListener> e = v.elements();
        while (e.hasMoreElements())
            (e.nextElement()).smokZasnal(event);
    }
    @SuppressWarnings("unchecked")
    public void obudzSmoka() {
        Vector<SmokListener> v = (Vector<SmokListener>) listeners.clone();
        SmokEvent1 event1 = new SmokEvent1(this);
        Enumeration<SmokListener> e = v.elements();
        while (e.hasMoreElements())
            (e.nextElement()).smokObudzilSie(event1);
    }
    public synchronized void addSmokListener(SmokListener d) {
        listeners.addElement(d);
    }
    public synchronized void removeSmokListener(SmokListener d) {
        listeners.removeElement(d);
    }
}

Różnica polega na tym, że każda z metod obudzSmoka() i uspijSmoka() generuje inne zdarzenie i wywołuje inna metodę listenera.

Klasa Main jest identyczna i generuje identyczne wyniki jak klasa Main w poprzednim wpisie.

Smok zasnął
Smok obudził się