Eigene Panelklassen und auslösen von Events

Halli Hallo

Mal wieder eine Frage zu Events und GUI.
Ich hab mir ein MVC System gebaut, zumindest denk ich das es so ganz gut funktioniert, und das läuft auch soweit. View löst ein Event aus, das wird von einem Controller angenommen. Der wiederum ändert mögliche Daten und gibt diese Info an die View durch.
Das Problem ist nun das die View mehr als unübersichtlich wird mit dutzenden Buttons, Labels, Panels etc. pp. Also war die Idee das man für größere Blöcke eigene Panelklassen baut und diese auf der “MainView” hinzufügt. Problem ist nun das auf den “SubViews” die Buttons zwar gedrückt werden können, diese aber keinen Zugriff mehr auf die Events haben, die für das 3er MVC Gespann gültig sind.

Was wäre in diesem Fall eine praktikable Lösung bzw. was könnte man am ehesten umbauen das das funktioniert? Eine Möglichkeit wäre die Listener/fireEvent Methode static zu bauen. Aber ist das so i.O? Oder ist die ganze Konstruktion von grundauf schon eher suboptimal?

Für ein besseres Verständnis hab ich mal ein kurzes Beispiel, ohne GUI, gebaut. Hoffe damit wird das Problem noch ersichtlicher.

Grüße

static natürlich nicht, wie mehrere Panel auseinanderhalten?

SubPanel muss nur ein Instanzattribut auf das Oberpanel bekommen, im Konstruktor übergeben


	public void subViewSayHello(){
//		PanelView.fireEvent(new PanelEvent("Hallo"));
	}

->

	public void subViewSayHello(){
		this.oberPanel.fireEvent(new PanelEvent("Hallo"));
	}

Oh, doch so einfach :slight_smile:
Ist das am Ende ein guter Weg das so zu bauen oder ist das Grundgerüst/-gedanke schon suboptimal und die Lösung eher ein Workaround?

man kann es immer anders machen, aufbohren

erstrebenswert ist gewiss nur eine Panelklasse zu haben, ein Panel kann Ober- oder Unterpanel sein,
je nachdem ob im Konstruktor ein anderes Panel oder nichts übergeben wird,
je nachdem ob im Attribut was drinsteht oder nicht

denkbar ist auch, dass das Unterpanel einen extra Controller spendiert bekommt, zwei Listener,
der von oben geerbte ist vielleicht ein programmweiter, der nur jede Aktion simpel loggt

ob die Events nach oben gereicht werden oder zu irgendeinem Zeitpunkt Controller von oben
auch unten ganz normal als ein Listener registriert werden, das sind Implementierungsdetails zur freien Auswahl

Alles klar.
Dann danke für den Hinweis und die Ausführung am Ende .)