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



## propra (19. Jan 2012)

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.


----------



## schlagi123 (19. Jan 2012)

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 ...


----------



## Gast2 (19. Jan 2012)

propra hat gesagt.:


> 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 (20. Jan 2012)

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


----------



## Gast2 (20. Jan 2012)

propra hat gesagt.:


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



Kann man allgemein nicht sagen.


----------



## ThreadPool (20. Jan 2012)

SirWayne hat gesagt.:


> [...]In einer normalen JList gibt es ein DefaultModel und extra ein SelectionModel...



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.


----------



## Gast2 (20. Jan 2012)

ThreadPool hat gesagt.:


> 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 (20. Jan 2012)

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?


----------



## Gast2 (20. Jan 2012)

propra hat gesagt.:


> 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 (20. Jan 2012)

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 (28. Jan 2012)

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.


----------



## propra (28. Jan 2012)

Das ist doch mal eine klare Aussage.

Vielen Dank.


----------



## Gast2 (28. Jan 2012)

propra hat gesagt.:


> Das ist doch mal eine klare Aussage.
> 
> Vielen Dank.



jo steht im 2ten beitrag...


----------

