Java-Prüfungsaufgabe - Entwurfsmuster für Grafikprogrammierung

fbergie

Grünschnabel
Hallo erstmal!

Ich bin gerade dabei für meine Java Prüfung zu pauken. Nun habe ich hier die Aufgabe8 welches letztes Mal gestellt wurde. Ich sitze schon 2 Tage an dieser Aufgabe und komme nicht weiter. Wie kann ich selber ein aktionEvent auslösen?

Wäre echt super wenn mir jemand helfen könnte. Über ein Beispiel Code wie ein Event ausgelöst wir würde ich mich sehr freuen. Wenn mir jemand die Aufgabe lösen kann wäre ich im 7.Himmel

Aufgabe 8 . jpg

LG der Bergie
 
Ich glaube er/sie/es meints so:

Java:
package core;

public class KlasseA extends Object
{
	private int zaehler;
	private ZahlerListener klasseB;
	
	public KlasseA(int zaehler)
	{
		super();
		this.zaehler = zaehler;
	}
	public void runterzaehlen()
	{
		if(this.zaehler > 0)
			this.zaehler--;
		else if(this.klasseB != null)
			this.klasseB.zahlerAbgelaufen();
	}
	public void addZahlerListener(ZahlerListener zl)
	{
		this.klasseB = zl;
	}
}
Java:
package core;

public class KlasseB extends Object implements ZahlerListener
{
	public KlasseB()
	{
		super();
	}
	public void zahlerAbgelaufen()
	{
		System.out.println("Zähler abgelaufen");
	}
}
Java:
package core;

public interface ZahlerListener
{
	public void zahlerAbgelaufen();
}

Sags bitte wenns richtig ist.

Ups, mit ist gerade ein Fehler aufgefallen:
Hier "registriert" sich B bei A, der/die AufgabenstellerIn will es umgekehrt. (Obwohl ich es so viel sinnvoller finde.)
Schreibs einfach um, ist ne Arbeit von Math.ceil(this.arbeitszeit) == 1 + "Minute". ^.^
 
Zuletzt bearbeitet:
Nein. "Dazu muss B eine Methode enthalten, um seine Objekte bei bei Objekten des Typs A registrieren zu können..."
Also muss addZaehlerListener() in KlasseB. (Ist meiner Meinung nach totaler Blödsinn.) Außerdem habe ich mich im Namen der Methode verschrieben. X_X".

d. H. du könntest addZaehlerListener() in B kopieren, und darin die addZa.... von A aufrufen. d. H. aber du müsstest A im Konstruktor von B übergeben, und B dann zurück per this innerhalb sich selbst beim Aufruf von A.

Allerdings frage ich mich was das alles mit Ereignissbehandlung und Graphikprogrammierung zu tun hat. 99% meiner Projekte basieren auf ATW-Graphic, und ich habe noch nie ein eigenes Interface definiert.
Bei Graphikprogrammierung ist bei mir auch noch nie irgend ein Ereigniss aufgetreten, weil ich einfach der Reihe nach alle Bilder und Strings nehme und auf das JFrame klatsche.
 
Zuletzt bearbeitet:
Ich möchte keines Wegs abstreiten das diese Aufgabenstellung ein wenig spezial ist ;)

Aber in meiner Prüfung geht es ja leider nicht darum gut programmiern zu können sondern viele Punkte zu sammeln. Natürlich sollten die Punkte die Fähigkeiten des getesteten widerspiegeln, leider tun sie das nicht immer.

Also ich habe nur noch ein ganz wenig an deinem Quelltest geändert, und nun sieht es so aus:

Java:
public class KlasseA extends Object
{
    private int zaehler;
    private ZahlerListener var;

    public KlasseA(int zaehler)
    {
        super();
        this.zaehler = zaehler;
        System.out.println("Der zaehler steht auf: "+zaehler);
    }
    public void runterzaehlen()
    {
        if(this.zaehler > 0)
        {  this.zaehler--;
           System.out.println("Der zaehler steht auf: "+this.zaehler);
        }
        else if(var!=null)
        { this.var.zahlerAbgelaufen();}
    }
    public void addZahlerListener(ZahlerListener var)
    {
        this.var = var;
    }
}

Java:
public class KlasseB extends Object implements ZahlerListener
{

    public KlasseB()
    {
        super();
        KlasseA meinEvent = new KlasseA(1);
        meinEvent.addZahlerListener(this);
        meinEvent.runterzaehlen();
        meinEvent.runterzaehlen();
          }

    public void zahlerAbgelaufen()
    {
        System.out.println("Zähler abgelaufen");
    }
}

Java:
public class Main {

    public static void main(String[] args) {
    new KlasseB();
    }

}

Java:
public interface ZahlerListener
{
    public void zahlerAbgelaufen();
}

Wobei für mich die bahnbrechenden Zeilen:
Java:
  private ZahlerListener var;

  public void addZahlerListener(ZahlerListener var)
    { this.var = var; }

sind , da ich bis dato nicht wuste das ich die VAR. so erzeugen kann
und weil ich nicht drauf gekommen wäre das sich über so eine Methode "Angemeldet" werden kann.

und das verschwunde (e) habe ich nicht vermist
 
Zurück