MVC und wie der Controller die View neu zeichnen lässt

propra

Aktives Mitglied
Hallo zusammen,

ich habe da noch ein kleines Verständnisproblem.
Ich habe ein JFrame mit Menubar. Werden Daten im Model verändert bekommt die View durch das Beobachtermuster mit, dass sich etwas geändert hat und zeichnet sich neu. Das funktioniert auch einwandfrei.
Jetzt habe ich aber im Controller eine Liste mit ausgewählten Elementen, die eine Teilmenge aller Elemente darstellt. Für mein Verständnis gehört die Liste mit allen Elementen ins Model und die temporär ausgewählten Elemente in eine Liste im Controller. Wird nun in der Liste im Model etwas hinzugefügt/verändert oder gelöscht, wird die View benachrichtigt und aktualisiert sich. Bei der Liste im Controller nicht.
Jetzt frage ich mich, wie man so etwas löst. Ruft man nun manuell die Methode repaint() des JFrames auf?
Ein weiteres konkretes Problem wäre bei mir die Einstellung eines Größenfaktors für meine Elemente. Im Controller habe ich eine Variable zoom, die einen Zahlwert zugewiesen bekommt. Über das Menu wird nun eine Größe ausgewählt und der Zahlenwert gesetzt. Die View müsste sich nun neu zeichnen und die Größe der Elemente anpassen.
Ich hoffe es ist einigermaßen klar geworden, wo mein Problem liegt.

Freue mich über jeden Hinweis.
 
S

schlagi123

Gast
Hallo propra

Ich glaube das Problem liegt an deinem Controller.

Der Controller soll die Models kennen und sie gegebenenfalls ändern.
Bei einer änderung benachrichtigen die Models die View (Listener), die View wird neu gezeichnet.
Bei einer Interaktion auf der View wird der Controller wieder benachrichtigt und ändert die Models
...

View --> Controller --> Model --> (Listener -->) View -->Controller ...
 
G

Gast2

Gast
Jetzt habe ich aber im Controller eine Liste mit ausgewählten Elementen, die eine Teilmenge aller Elemente darstellt. Für mein Verständnis gehört die Liste mit allen Elementen ins Model und die temporär ausgewählten Elemente in eine Liste im Controller.

Warum soll das so sein?
In einer normalen JList gibt es ein DefaultModel und extra ein SelectionModel...
 

propra

Aktives Mitglied
Hallo zusammen,

also verstehe ich das richtig, dass ein Controller in dem Sinne keine Instanzvariablen hat, sondern immer mit Werten aus dem Model arbeitet?

Viele Grüße
propra
 
G

Gast2

Gast
Es sollte noch erwähnt werden das diese Konstrukte in die Kategorie "Application Model" fallen und nicht allgemeingültig mit dem "Domain Model" gleichzusetzen sind.

Ja gut das normale Model kann ein Domain Model sein.
Das es für die Represantation je nach UI Toolkit noch andere Elemente dazu kommen, ist bei solchen Probleme wie oben eigentlich normal, vor allem bei Selektion usw.
 

propra

Aktives Mitglied
Hallo zusammen,

wie würdet Ihr das konkret bei meinen beiden beschriebenen Problemen (Variable Zoomfaktor und temporäre Liste von ausgewählten Elementen) lösen?
Wenn ich es so mache, wie schlagi123 vorgeschlagen hat, dann bleibt mir ja nur die Verwaltung der Werte in meinem Model oder welche Alternative würde es geben?
 
G

Gast2

Gast
Hallo zusammen,

wie würdet Ihr das konkret bei meinen beiden beschriebenen Problemen (Variable Zoomfaktor und temporäre Liste von ausgewählten Elementen) lösen?
Wenn ich es so mache, wie schlagi123 vorgeschlagen hat, dann bleibt mir ja nur die Verwaltung der Werte in meinem Model oder welche Alternative würde es geben?

Dein Problem ist viel zu abstrakt um dazu was zu sagen.

Ich weiß auch nicht was du mit den Daten machst, ob du manche davon später spiechern musst und und und.
Außerdem probiers doch einfach aus, mach dir ein model mit einer Liste und zoomfaktor + Events.
 

propra

Aktives Mitglied
Mein Problem ist nicht die Umsetzung, sondern möchte ich gerne wissen, was "richtig" ist.
Vielleicht ist da meine Denkweise auch etwas falsch und es gibt kein richtigen oder falschen Weg.
Möchte eigentlich nur verhindern, dass ich mir etwas angewöhne, was später einmal zu Problemen führt oder zur Sackgasse wird.
 

bERt0r

Top Contributor
MMn ist Datenhaltung in einem Controller fehl am Platz. Egal ob es jetzt nur die Selektion oder die Rohdaten sind, das gehört in ein Model. Ob du ein eigenes SelectionModel machst oder das gleich deinem anderen Model dranhängst ist dir überlassen, im Controller hat eine List aber ganz sicher nichts zu suchen.
 

Ähnliche Java Themen

Neue Themen


Oben