MVC: Rolle vom MainController zu Fenstern, Unterfenster u. Listenern

UnkiDunki

Bekanntes Mitglied
Hi,

mein Hauptfenster (JFrame) besitzt den "MainController", worin alle Panels, etc. iniziiert werden, einer ArrayList im "MainModel" hinzugefügt werden und dabei gleichzeitig die "MainView" benachrichtigt wird, dass sie jeden neu hinzugefügten Panel ggf. doch bitte einem JTabbedPane als neues Tab übergeben soll. So weit so gut?!?

Es kommt ja vor, dass z.B. in einem Unterfenster x Daten bearbeitet werden, die in einem ganz anderen Unterfenster y danach aktualisiert werden müssen. Nun stellt sich mir die Frage wie ich dieses genau umsetze. Mir bietet sich bei meiner aktuellen Umsetzung zwei Möglichkeiten, wobei bei beidem der MainController die Hauptrolle spielt:

a) Ich implementiere im Controller (oder der View?) von y den Listener für das Model x und registriere im MainController den Controller y als Listener beim Model x. Verbindung ist dann gegeben und der Controller y kann bei Änderungen im Model x entsprechend reagieren.

b) Ich implementiere im MainController den Listener für Model x und werde dann im MainController über Änderungen im Model x informiert und kann dann z.B. aus und mit dem MainController bestimmte Änderungen im Controller y initiieren.

Was wäre da das "bessere" Konzept? Spontan würde ich mal a) sagen...

Eine weitere Frage, die sich mir bei a) dann anschließt wäre, wo ich den Listener für ein ANDERES Model implementiere. Allgemein ist es ja so, dass ich den Listener in der View implementiere und die View sich dann bei dem EIGENEN Model als Listener registriert und so über Änderungen informiert wird. Wie schaut es aber mit Änderungen von NICHTEIGENEN Models aus?

Da würde ich auch wieder spontan sagen, dass auch bei "fremden" Models die View als Listener fungiert, da diese sich ja entsprechend ändern muss, sofern etwas im "fremden" Model geändert wird.

Danke im Voraus :)
 

Wildcard

Top Contributor
Da es sich ja anscheinend um eine Anwendung handeln soll die möglichst flexibel strukturiert sein soll muss ich das einfach fragen:
Warum verwendest du kein Applikationsframework wie Eclipse RCP. Ansonsten erfindest viele hundert Räder neu...
Um deine Frage beantworten zu können:
Was verbindet Unterfenster X und Unterfenster Y? Woher bekommen sie die Modellinstanzen?
Ist das zugrundeliegende UI Pattern Master/Details ähnlich (je nach selektion in X [Master] können Daten in Y [Details] verändert werden, oder ist deine Anwendung anders aufgebaut?
 

UnkiDunki

Bekanntes Mitglied
Hi WildCard,

ehrlich gesagt bin ich kein Fan von Frameworks, wobei man das so eigentlich auch nicht sagen könnte... Ich habe irgendwie noch nie Frameworks benutzt, obwohl ich weiss, dass ich es eigentlich müsste... Schreibe irgendwie lieber jede Zeile Code selber als mir irgendwas erstellen zu lassen, auch wenn das ja eigentlich Quatsch ist, denn der Zeitaufwand, den man sparen könnte, ist ja dabei wirklich nicht ohne...
Ich hätte mich eigentlich auch schon längst in Hibernate o.ä. einarbeiten sollen... Mhmm...

Was verbindet Unterfenster X und Unterfenster Y? Woher bekommen sie die Modellinstanzen?

Die Modelle werden in den jeweiligen Controllern instanziiert. Allgemein ist es so, dass es meist z.B. eine Auswahlliste in Fenster y betrifft, die aktualisiert werden muss, wenn im Fenster x die in y auswählbaren Items erweitert, editiert oder gelöscht werden.
Mit Master und Details meinst du z.B. eine Tabelle mit Items und bei Auswahl eines Items wird z.B. dieses in ein Formular zur Bearbeitung geladen? Das hatte ich zuerst alles recht stur und unflexibel, ziemlich redundant "zusammengeschustert" gehabt, bis ich Master und Details unabhängig aufgesplittet habe. Master ist jetzt so flexibel, dass ich das überall einsetzen kann. Details nicht, weil das doch recht individuell ist...
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
ehrlich gesagt bin ich kein Fan von Frameworks, wobei man das so eigentlich auch nicht sagen könnte... Ich habe irgendwie noch nie Frameworks benutzt, obwohl ich weiss, dass ich es eigentlich müsste... Schreibe irgendwie lieber jede Zeile Code selber als mir irgendwas erstellen zu lassen, auch wenn das ja eigentlich Quatsch ist, denn der Zeitaufwand, den man sparen könnte, ist ja dabei wirklich nicht ohne...
Solltest du ändern. Frameworks reduzieren nicht nur Kosten und Codemenge, sie helfen auch dabei von Anfang an sauberer zu Entwickeln und den Code damit flexibler und wartbarer an.
Ich bin mittlerweile der Meinung das OSGi in ziemlich jede Anwendung gehört und das Eclipse RCP das richtige für fast jede Desktopanwendung ist.

Die Modelle werden in den jeweiligen Controllern instanziiert. Allgemein ist es so, dass es meist z.B. eine Auswahlliste in Fenster y betrifft, die aktualisiert werden muss, wenn im Fenster x die in y auswählbaren Items erweitert, editiert oder gelöscht werden.
Da ja beide auf der gleichen Modellinstanz arbeiten ist die Sache doch straight forward. Jeder hängt seine eigene Listener nach eigenem Gusto ein.
 

UnkiDunki

Bekanntes Mitglied
Solltest du ändern. Frameworks reduzieren nicht nur Kosten und Codemenge, sie helfen auch dabei von Anfang an sauberer zu Entwickeln und den Code damit flexibler und wartbarer an.

Weiss ich natürlich und ich hatte auch schon ein paar Anläufe, aber recht schnell wieder aufgegeben. Bin für Frameworks irgendwie zu doof und habe das immer recht schnell aufgegeben. Keine Ahnung, ob ich immer die falschen Tuts hatte... Einen, der mir da persönlich über die Schulter guckt, habe ich da leider nicht, wenn man jetzt von Foren, etc. absieht natürlich.
Aber Sinn und Zweck sind klar und dass das auch irgendwann mal ne Notwendigkeit werden wird irgendwie auch. Argh...

Da ja beide auf der gleichen Modellinstanz...

Sorry, da hatte ich mich wohl falsch ausgedrückt. Haben beide nicht die selbe Modelinstanz, sondern verschiedene Model. Deshalb war die Frage, wie und wo ich die Verbindung zwischen Fenster x und Fenster y bezüglich der Listener vernünftig setze...
 
G

Gast2

Gast
Ich bin mittlerweile der Meinung das OSGi in ziemlich jede Anwendung gehört und das Eclipse RCP das richtige für fast jede Desktopanwendung ist.

[OT] Ich finde für Business Anwendungen o.ä. sind Eclipse RCP super, aber wenn man die GUI ein bischen individueller oder grafisch gestalten will, find ich geht das mit SWT/JFace schwer.[/OT]

Weiss ich natürlich und ich hatte auch schon ein paar Anläufe, aber recht schnell wieder aufgegeben. Bin für Frameworks irgendwie zu doof und habe das immer recht schnell aufgegeben. Keine Ahnung, ob ich immer die falschen Tuts hatte... Einen, der mir da persönlich über die Schulter guckt, habe ich da leider nicht, wenn man jetzt von Foren, etc. absieht natürlich.
Aber Sinn und Zweck sind klar und dass das auch irgendwann mal ne Notwendigkeit werden wird irgendwie auch. Argh...

Einfach mal anfangen damit vieles kommt mit der Zeit und man wird auch mit der Erfahrung besser und rü Eclipse RCP gibt es echt gute Tuts und Bücher...
 

Wildcard

Top Contributor
Sorry, da hatte ich mich wohl falsch ausgedrückt. Haben beide nicht die selbe Modelinstanz, sondern verschiedene Model. Deshalb war die Frage, wie und wo ich die Verbindung zwischen Fenster x und Fenster y bezüglich der Listener vernünftig setze...
Sollen sie denn die gleichen Daten darstellen? In diesem Fall sollte es nämlich das gleiche Modell sein.

[OT] Ich finde für Business Anwendungen o.ä. sind Eclipse RCP super, aber wenn man die GUI ein bischen individueller oder grafisch gestalten will, find ich geht das mit SWT/JFace schwer.[/OT]
Geht doch eher besser als mit Swing Anwendungen (siehe e4, Styling der Anwendung durch CSS).
Siehe zB hier, der Code ist ganz normaler SWT Code und durch ein CSS sieht es dann so aus:
E4 Deployment
 

UnkiDunki

Bekanntes Mitglied
Sollen sie denn die gleichen Daten darstellen? In diesem Fall sollte es nämlich das gleiche Modell sein.

Nunja... schon... das eine ist eine Tabelle mit Items (Fenster x) und das andere eine ComboBox mit denselben Items (Fenster y)... die wirkliche Schnittstelle zwischen beiden ist ja eine Datenbank. Bisher ist es so, dass ich bei Änderungen in Fenster x ein Datenbankupdate mache, Fenster y informiere, welches sich die aktuellen Daten aus der Datenbank holt und die ComboBox aktualisiert. Das gleiche Modell kann es ja nicht wirklich sein, was x und y nutzen oder muss ich da auch noch weiter aufschlüsseln, dann wird das nämlich so langsam wirklich kompliziert :) Denn generell ist es ja so, dass die Fenster bisher jeder ein Model haben, worin nicht nur z.B. ComboBoxinhalte verwaltet werden, sondern auch andere Dinge, die im jeweiligen Fenster gebraucht werden und die sich deswegen in manchen Dingen unterscheiden... Wenn ich jetzt zB. zwei Auswahllisten habe, dann verwaltet das Model dieser View auch beide Models der Auswahllisten und aktualisert diese in der View werden sie z.B. von außen neu gesetzt.
 
G

Gast2

Gast
Geht doch eher besser als mit Swing Anwendungen (siehe e4, Styling der Anwendung durch CSS).
Siehe zB hier, der Code ist ganz normaler SWT Code und durch ein CSS sieht es dann so aus:
E4 Deployment

Hab mir e4 noch nicht angeschaut hab mir mal ein Eclipse Magazin Artikel dazu gelesen, soll wohl noch nicht ganz so ausgereift sein, aber den Weg find ich schon mal nicht schlecht... Auch die Idee mit dem Eclipse RIA find ich super...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
F Menüs in allen Fenstern anzeigen AWT, Swing, JavaFX & SWT 12
F Swing JAVA GUI Übergabe von Werten zwischen mehreren Fenstern/Klassen AWT, Swing, JavaFX & SWT 10
B Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben AWT, Swing, JavaFX & SWT 4
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8
JStickman SWT Problem mit Fenstern AWT, Swing, JavaFX & SWT 7
F Initialisieren von Fenstern über Methoden AWT, Swing, JavaFX & SWT 3
I Arbeiten mit mehreren Fenstern AWT, Swing, JavaFX & SWT 4
X Wie passt JIternalFrame sich den anderen Fenstern an? AWT, Swing, JavaFX & SWT 3
Herr.Jth Frage zu inaktiven Fenstern AWT, Swing, JavaFX & SWT 7
M Hintergrundgrafik in Swing-Fenstern AWT, Swing, JavaFX & SWT 11
R Navigieren zwischen mehreren Fenstern AWT, Swing, JavaFX & SWT 7
C Probleme beim ausführen von Programmen mit Fenstern+Inhalt AWT, Swing, JavaFX & SWT 3
U Anwendung mit mehreren "Fenstern" AWT, Swing, JavaFX & SWT 4
H Problem mit Layout Fenstern (Swing) AWT, Swing, JavaFX & SWT 3
L GUI - 2 Buttons mit 2 Fenstern verlinken AWT, Swing, JavaFX & SWT 4
O Applikation mit unterschiedlichen Fenstern AWT, Swing, JavaFX & SWT 4
K JFrames in verschiedenen Fenstern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben