Swing MVC / View - Controller

  • Themenstarter Themenstarter Gurvan
  • Beginndatum Beginndatum
G

Gurvan

Gast
Hallo,

habe bereits viel über das MVC-Pattern gelesen, jedoch ist mir einiges noch nicht ganz klar geworden.

Eine Frage bezüglich der Beziehung zwischen View und Controller, bsp.:
Java:
public class View extends JFrame implements ActionListener {

	private Controller controller;
	private Model model;

	private JMenuBar menuBar;
	private JMenu menu;
	private JMenuItem menuItem;

	public View(Controller controller, Model model) {
		super("MVC-Example");
		this.controller = controller;
		this.model = model;

		this.initView();
		this.pack();
		this.setVisible(true);
	}

	private void initView() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		this.menuBar = new JMenuBar();
		this.menu = new JMenu("menu");
		this.menuItem = new JMenuItem("fillField");
		this.menuItem.addActionListener(this);

		this.setJMenuBar(menuBar);
		this.menuBar.add(menu);
		this.menu.add(menuItem);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		if (arg0.getSource() == menuItem) {
			controller.menuClicked();
		}
	}
}
Nichts besonderes - eine MenuBar mit einem Menü. Sofern auf den Menüeintrag geklickt wird, wird die Methode [c]menuClicked()[/c] aufgerufen. Der Controller entscheidet dann was zu tun ist (zb: model benachrichtigen, dieser benachrichtigt die view über neuen inhalt eines textfeld).
Wie sieht das ganze nun aus wenn durch klicken des Menüeintrag ein Dialog mit zwei Textfeldern geöffnet wird indem Eingaben getätigt werden (bsp Telefonbuchverwaltung: Eingabe eines Namen -> Ausgabe der Telefonnummer)? Ist der Dialog dann eine eigene View und besitzt somit auch seinen eigenen Controller oder wie sollte dies Behandelt werden?

Über eine kleine Hilfe wäre ich dankbar.


Gruß
 
Hallo,

eigentlich ist es streng genommen so, dass die View nur den Controller kennt und das Model nur den Controller kennt. Der Controller wiederum kann beide kennen (Prinzip der Datenkapselung: Jeder soll nur das kennen, was er auch für die Erfüllung seines Zweckes benötigt).
Du aber hast der View auch das Model gegeben, was eigentlich nicht so gedacht ist.
Es gibt aber auch weniger strenge Versionen, bei denen die View und der Controller eine gemeinsame Klasse sind und es dann eben noch das Model gibt.
Ein Dialog ist eigentlich nichts anderes als ein weiterer Bestandteil der View, dieser sollte also seine Ergebnisse auch dem Controller mitteilen, und dieser dann dementsprechend handeln und zum Beispiel dem Model Bescheid geben. Ändert sich dann etwas am Model, so gibt das Model dem Controller Bescheid und dieser wiederum bei Bedarf der View.
Ich hoffe, das hilft dir

P.s.: Nach wenigen Stunden braucht man noch nicht fragen, ob wirklich
hat.

Gruß
 
Zuletzt bearbeitet:
eigentlich ist es streng genommen so, dass die View nur den Controller kennt und das Model nur den Controller kennt.
Das Model den Controller? Der Sinn des MVC-Patterns besteht doch darin das dass Model unabhängig von der View und dem Controller agiert.

Du aber hast der View auch das Model gegeben, was eigentlich nicht so gedacht ist.
Es gibt aber auch weniger strenge Versionen, bei denen die View und der Controller eine gemeinsame Klasse sind und es dann eben noch das Model gibt.
Ja das stimmt, da habe ich heute ziemlich viel verschiedene Meinungen zu gelesen.

Danke dir für den Beitrag.
 
So ist das ganze zur Zeit bei mir auch Implementiert. Die View kennt das Model um bei einem update auf die neuen Daten zugreifen zu können, habe nun aber bemerkt das ich das Model bei [JAPI]java.util.Observer#update(java.util.Observable, java.lang.Object)[/JAPI] mit übergeben kann (eine instanz des model in der view ist somit überflüssig).
Das Problem besteht nun aber immernoch darin wie die Daten des Dialog zum Controller gelangen. In der "HauptView" wird ein Object des Dialog erzeugt, sollte ich hier einfach den Controller mit übergeben sodass der Dialog diesen kennt?
 
So ist das ganze zur Zeit bei mir auch Implementiert. Die View kennt das Model um bei einem update auf die neuen Daten zugreifen zu können, habe nun aber bemerkt das ich das Model bei [JAPI]java.util.Observer#update(java.util.Observable, java.lang.Object)[/JAPI] mit übergeben kann (eine instanz des model in der view ist somit überflüssig).
Das Problem besteht nun aber immernoch darin wie die Daten des Dialog zum Controller gelangen. In der "HauptView" wird ein Object des Dialog erzeugt, sollte ich hier einfach den Controller mit übergeben sodass der Dialog diesen kennt?

Ich würde entweder die Ergebnisse des Dialogs über die View zum Controller geben, oder wie du dem Dialog den Controller mitgeben. Noch ein weg wäre dem Controller das Verwalten des Dialogs zu überlassen und die erste View sagt dem Controller nur: mach mal einen Dialog auf und behandle dessen Ergebnis.
 
Noch ein weg wäre dem Controller das Verwalten des Dialogs zu überlassen und die erste View sagt dem Controller nur: mach mal einen Dialog auf und behandle dessen Ergebnis.

Na darüber habe ich noch garnicht nachgedacht - obwohl ich das mit "JOptionPane's" ähnlich handhabe. Dann werde ich das jetzt erst einmal so umschreiben, scheint wohl bisher die beste Möglichkeit zu sein.

Danke dir! Weitere Möglichkeiten können gerne genannt werden 😉
 

Neue Themen


Zurück
Oben