# Kennt sich jemand mit Observern aus?



## erdbeerbunny (21. Aug 2003)

Hallo,

habe das Problem, dass ich nach MVC-Architektur ein Kassenterminal programmiere,  und nun meiner GUI Bescheid geben will, wenn sich was in der Datenhaltung ändert... Konkret: Ich habe eine Artikelliste, und immer wenn ein Artikel zu dieser Liste hinzugefügt wurde, soll sich ein JTable aktualisieren, ohne dass die Artikelliste die GUI kennt.. Soweit ich mich informiert habe, besteht eine Möglichkeit, dies mit nem Observer zu realisieren... Würde mich wahnsinnig freuen, wenn mir jemand dazu Tipps geben könnte...

LG, das Bunny


----------



## DTR (22. Aug 2003)

Hi,

ich denke am einfachsten ist es wohl so. Der Controller sorgt ja dafür, das ein Neuer Eintrag in das Model eingefügt wird. Im anschluß daran sorgt der Controller dafür, das die View sich mit den neuen Daten aktualisiert.


----------



## Guest (22. Aug 2003)

so in etwa ists ja auch geplant... jetzt ist nur die frage, wie der controller dem view die nachricht zum update gibt... oder meinst du, model und view solltem im controller bekannt sein? kann natürlich auch sein, dass ich einfach nur auf dem schlauch stehe... *g*


----------



## DTR (22. Aug 2003)

Der Controller muss natürlich die View und das Model kennen, sonst kann er sie ja nicht kontrolieren  .


----------



## Guest (22. Aug 2003)

stimmt schon *g*...  ich glaube, mvc ist mir etwas suspekt... *g*
nochmal für blöde: die komplette kommunikation von view und model geht doch über den controller, oder? ruf ich dann view-set-methoden im controller auf oder lass ich das view über controller-get-methoden sich die daten aus dem model holen? *hilfeee*


----------



## DTR (22. Aug 2003)

die Aktion geht vom Controller aus. Die View fängt ja nicht einfach so an sich zu aktualisieren. Der Controller muss also Mthoden bei der View aufrufen.


----------



## schalentier (9. Sep 2003)

ähm, sorry, aber das is quatsch.

Der View macht nix außer zeichnen (JTable.UIirgendwas) und hört auf änderungen (observer).
Das Model ändert irgendwer (z.b. controller) und teilt diese änderungen allen zuhörern mit (observable).
Der Controller hört auf die Usereingaben (implements MouseListener) und gibt die ans model weiter (über setter)

d.h. der controller muss dem view nix mitteilen.

allerdings brauchst du das alles nich machen, da genau diese funktionalität bereits in swing drinne is. bei swing is das lediglich bissel verwurschtelt, letzendlich fehlt aber nur der controller, den du coden musst.
konkret musst du nur sämtliche änderungen über das TableModel deiner JTable machen, da wird alles automatisch für dich gemanaged (über insertrow). gibt auch eine methode fireTableRowsUpdated, allerdings hatte ich mit der probleme, deswegen lösche ich die betreffende zeile und füg sie wieder ein, wenn sich eine ändert :wink: 

viel spass


----------

