Announcement

Collapse
No announcement yet.

Frage zu Aufbau einer Java-Applikation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu Aufbau einer Java-Applikation

    Hallo zusammen,
    ich bin zur Zeit dabei eine umfangreichere JavaSwing-Applikation zu entwickeln. Schon jetzt zur Planungsphase stosse ich auf Fragen, die sich mir bei meinen bisherigen Projekten nicht auftaten.
    Ein genrelles Problem habe ich mit der Verknüpfung von verschiedenen Dialogen und Masken. Da ich zur Zeit noch in der Planungsphase bin, gibt es noch keine Quellcode und versuche es mal mit einer Bespielbeschreibung:
    Es gibt zB eine Maske zur Kundendateneingabe; um sich die Tipparbeit zu ersparen, soll zB ein Suchen-Dialog aufrufbar sein - die dort ausgewählten Daten sollen nach Bestätigung nun die Kundenmaske füllen. Für mich stellt sich die Frage, wie man sowas verwirklicht, ohne in die Prozedurale-Programmierung zu verfallen.
    Bei meinem bisherigen Java-Wissen wird jeder Button mit einem Listener belegt; eine Abfolge der Auswertungen sähe dann so aus:
    <pre>
    wenn Button"Kunde" geklickt;
    zeige Kundendialog;
    wenn Button"Suchen" geklickt;
    zeige Suchendialog;
    wenn Suchendialog weg
    fuelleKundendialog(holeWerteSuchenDialog)
    nnew
    nnew
    nnew
    </pre>
    Was mich weiter beschäftigt, wie man solche Dialoge verbindet, ohne jeden StandardPanel extra mit einem SuchenPanel zu versehen(Wiederverwendbarkeit). Oder ist das in in diesem Fall "normal".

    Vielleicht kann mir jemand einen Hinweis geben, unter welchen Schlagwörtern ich suchen muß. Im Internet oder bei Sun findet man massenhaft Beispiele, die mir auch bisher sehr geholfen haben, nur speziell für dieses Thema tue ich mich etwas schwer.
    Ich hoffe, ich konnte mein Problem einigermassen verständlich darlegen.

    Vielen Dank und Gruß
    Matthias Zitzen

  • #2
    Ich denke es wäre möglich entweder das
    Objekt der "unterstehenden" Maske zu übergeben (zB Konstruktor)
    und so durch die jeweiligen Methoden zu füllen
    oder für die zu veränderde Maske statische Methoden zum Füllen definieren und anwenden.
    Dies müsste dann eben in einem "suchendialog_klick_ok" (?!?!) ereigniss passieren, was den Dialog verschwinden läßt und die Daten in die Maske einträgt.
    <br>
    Die Verbindung könnte zB dann über Interfaces realisiert werden

    Comment


    • #3
      Also bei mir würden sich der Suchendialog und der Kundendialog überhaupt nicht kennen. Ich würde das MVC-Pattern anwenden. Es gäbe ein Kunden-Model. Bei diesem Kunden-Model registriert sich der Kundendialog als Listener. (Es wird ein Interface namens KundenModelListener definiert und der Kundendialog implementiert dieses Interface.) Das Kunden-Model wird beiden Dialogen via einer setModel()-Methode bekannt gegeben.

      Ich weiß ja nicht wie dein Suchendialog aussehen soll. Soll er exakt dieselben Felder wie der Kundendialog haben nur, dass man einzelne Felder mit ein paar Zeichen füllen kann. Z.B. in das Feld mit Nachname kann man nur "Ro" eingeben und dann den Suchen-Button klicken. Dann sollen alle Kunden deren Nachname mit "Ro" beginnt gesucht werden. Oder es gibt eine Combox in der alle Namen der bisher bekannten Kunden in der Form: "Nachname, Vorname" drin stehen. Der Benutzer kann dann über diese ComboBox einen bereits vorhandenen Kunden auswählen.

      Beim Öffnen des Suchen-Dialogs fragt dieser das Kunden-Model nach allen Kunden und erhält z.B. eine Liste mit Strings zurück. Dieses Strings bestehen aus "Nachname, Vorname". Gleichzeitig wird aber auch noch für jeden Kunden eine eindeutige ID mit übergeben. (Wie das genau gemacht wird, sei mal hinten angestellt.) Wenn der Benutzer nun einen Kunden ausgewählt hat und den Suchendialog mit OK schließt, so sendet dieser die Nachricht, dass der Kunde mit der ID yx angezeigt werden soll an das Model. Das Model sendet nun widerum die Nachricht, der Kunde mit der ID xy soll angezeigt werden an alle seine Listener. In diesem Fall ist lediglich der Kundendialog als Listener registriert. Dieser erhält die Nachricht und sendet nun wiederum eine ganze Latte Nachrichten an das Kunden-Model. Z.B. gib mir den Nachnamen des Kunden mit der ID xy, gib mir den Vornamen usw. Möglich wäre auch dass ein Kunden-Objekt erzeugt wird und dieses Kunden-Objekt vom Model an den Kunden-Dialog zurückgeliefert wird.

      Wichtig ist, dass der Suchendialog nicht direkt mit dem Kundendialog und umgekehrt kommunizieren, sondern dass die Kommunikation über das Model abgewickelt wird.

      Das ist wie in manchen Kommödien im TV. Mutter und Vater haben Streit, reden nicht mehr miteinander. Sitzen am Mittagstisch links und rechts. In der Mitte die Tochter/der Sohn. Vater sagt: Sag deiner Mutter, dass sie den Salat reichen soll. Mutter reicht den Salat der Tochter, die Tochter reicht den Salat weiter an den Vater, usw.
      Wenn es der Mutter eines Tages stinkt, so kann sie auch die Haushälterin an ihren Platz setzen, da der Vater nur über die Tochter mit der Mutter kommuniziert, würde er diesen Austausch nicht bemerken, solange er nur seinen Salat bekommt. Das heißt es gibt keine direkte Abhängigkeit zwischen Vater und Mutter.

      Genauso gibt es keine direkte Abhängigkeit zwischen dem Suchen- und dem Kunden-Dialog. Sollte es eines Tages erforderlich sein, den Kunden-Dialog gegen einen anderen Kunden-Dialog auszutauschen, so kann dies realisiert werden ohne den Suchen-Dialog anpassen zu müssen.

      Außerdem können so unterschiedliche Instanzen des Suchendialogs mit unterschiedlichen anderen Dialogen zusammengekoppelt werden. Wenn der Suchen-Dialog hauptsächlich nur aus der Combobox besteht, so ist es ihm letztendlich egal, ob er darin Kunden oder Orte mit PLZ anzeigt oder was auch immer. Wichtig ist, dass er auch die ID kennt und seinem Model dann sagen kann, das Objekt mit der ID xyz ist gesucht. Ob dieses Objekt dann eine Kunde oder ein Ort ist, ist dann egal.

      Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

      Gruß

      Wolfgang Rolle

      Comment

      Working...
      X