Ereignisbehandlung, Eventhandling

xice

Mitglied
Hallo!

Ich habe ein Problem bei meiner Ereignisbehandlung.
Folgendes möchte ich umsetzen:

Es sollen 3 Klassen definiert werden und ein Interface.

Die Klasse A enthalte die private Instanzvariable zaehler vom Typ int, die durch Parameterübergabe an einen Konstruktor initialisiert werden soll. Eine Methode mit der Signatur public void runterzaehlen() soll von dieser Variablen den Wert 1 abziehen, wenn sie den Wert 0 noch nicht erreicht hat.

Eine Klasse B interessiert sich für das Ereignis, dass in der Klasse A der Zähler auf Null gezählt wurde. Bei diesem Ereignis soll ein Objekt vom Typ B die Meldung "Zähler abgelaufen!" auf der Konsole ausgeben. Dazu muss B eine Methode enthalten, um seine Objekte bei Objekten des Typs A registrieren zu können. Dazu soll die Methode addZaehlerListener benutzt werden.
Ein Interface ZaehlerListener mit der Methode zaehlerAbgelaufen soll definiert werden.

Soweit scheint es zu funktionieren, aber dennoch nicht so, wie es im Text verlangt wird.
Bin für jeden Verbesserungsvorschläg dankbar!

Mein Ansatz:

Interface
Java:
public interface ZaehlerListener extends EventListener{
    public void zaehlerAbgelaufen(A event);
}

Klasse A

Java:
import java.util.*;

public class A extends EventObject {

    private int zaehler;    

    A(Object source, int zaehler) {
        super(source);
        this.zaehler=zaehler;
    }

    public void runterzaehlen() {
        if (zaehler != 0)
            zaehler--;
        System.out.println(zaehler);
    }

    public int getZaehler() {
        return zaehler;
    }    
}

Klasse B
Java:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class B {

    private List _listeners = new ArrayList();

    public void addZaehlerListener(ZaehlerListener listener) {
        _listeners.add(listener);
    }

    public void check(A event) {
        if (event.getZaehler() == 0)
            eventAusloesen(event);
    }

    private synchronized void eventAusloesen(A event) {        
        Iterator listeners = _listeners.iterator();
        while( listeners.hasNext() ) {
            ( (ZaehlerListener) listeners.next() ).zaehlerAbgelaufen(event);
        }
    }    
}

Klasse C
Java:
public class C implements ZaehlerListener {

    public void zaehlerAbgelaufen(A event) {
        System.out.println("Zähler abgelaufen!");
    }
}

Main
Java:
public class Main {

    public static void main(String[] args) {
        A a;
        B b;
        C c;

        b = new B();
        a = new A(b,2);
        c = new C();
        b.addZaehlerListener(c);
                
        a.runterzaehlen();
        a.runterzaehlen();

        b.check(a);
    }
}
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben