6

Ich bin kürzlich auf ein Problem gestoßen, das versucht, Model-View-Controller in Swing zu implementieren.Wie man die Ansicht und den Controller in Swing koppelt

Ich habe eine GUI-Klasse, die aus Unter-Panels besteht, und diese Unter-Panels bestehen aus anderen Unter-Panels. In einem dieser Sub-Sub Panels befindet sich nun ein JButton. Im ActionListener für dieses JButton möchte ich eine Methode im Controller aufrufen. Um dies zu tun, müsste ich den Controller tief in den Eingeweiden der GUI an das Sub-Sub-Panel übergeben, wo sich der JButton befindet. Dann müsste ich in diesem Sub-Sub-Panel einen ActionListener an die JButton anhängen und die actionPerformed() -Funktion ausfüllen, indem ich die Methode, die ich im Controller aufrufen wollte, aufruft.

Ich bin sicher, dass Sie alle das Problem sehen. Gibt es eine gute Möglichkeit zu vermeiden, den Controller tief in die Tiefe der GUI zu übergeben.

Mein einziger Gedanke war, den Controller ein Singleton zu machen, um es von der Ansicht zu entkoppeln, aber ich habe gehört, dass Singletons normalerweise böse sind.

Jeder Rat in dieser Angelegenheit würde am meisten geschätzt werden. Danke im Voraus!

Antwort

4

Statt in einem Verweis auf die Steuerung von vorbei, lassen Sie den Regler auf die Ansicht hören, wiehere Bild von der indirekte Vereinigung vorgeschlagen. Hinzufügen eines PropertyChangeListener, illustriert here, ist dafür ideal. Wenn die Ansicht den Controller aufrufen muss, ruft sie einfach firePropertyChange() auf.

Ein zweckmäßigerer Ansatz besteht darin, dem Controller für bestimmte Vorgänge eine separate Ansicht zu geben, wie z. B. die reset()-Methode, die here gezeigt wird.

Verwandte Themen