MVC: Grundidee verstanden aber was machen mit mehreren Model

Status
Nicht offen für weitere Antworten.

mvitz

Top Contributor
Hallo zusammen,

für ein privates Projekt stehe ich gerade vor dem Problem, was man macht, wenn man mehrere Modells (also Instanzen von einer Klasse) hat. Für genau eine Instanz von Person sieht das ganze aktuell so aus:

Starterklasse:
Code:
package de.javaforum.swingmvc;

import de.javaforum.swingmvc.controller.PersonManager;
import de.javaforum.swingmvc.modell.Person;

public class Main {

	public static void main(String[] args) {
		Person test = new Person("Test");
		new PersonManager(test);
	}
}
Modell:
Code:
package de.javaforum.swingmvc.modell;

import java.util.LinkedList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

public class Person extends Observable {

	private String name;
	private List<Observer> observers;

	public Person(String name) {
		this.name = name;
		observers = new LinkedList<Observer>();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
		notifyObservers();
	}

	@Override
	public synchronized void addObserver(Observer observer) {
		observers.add(observer);
	}

	@Override
	public void notifyObservers() {
		for (Observer observer : observers) {
			observer.update(this, null);
		}
	}
}
Btw. muss man hier immer selber die Methoden add, notify etc. implementieren oder gibt es da einen Trick?

Controller:
Code:
package de.javaforum.swingmvc.controller;

import de.javaforum.swingmvc.modell.Person;
import de.javaforum.swingmvc.view.GUI;

public class PersonManager {

	private Person person;
	private GUI gui;
	
	public PersonManager(Person person) {
		this.person = person;
		gui = new GUI(this, person);
		gui.show();
	}
	
	public void changeName(String name) {
		person.setName(name);
	}
}

View:
Code:
package de.javaforum.swingmvc.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import de.javaforum.swingmvc.controller.PersonManager;
import de.javaforum.swingmvc.modell.Person;

public class GUI implements Observer {

	private JFrame frame;
	private JTextField nameField;
	private JLabel nameLabel;

	private Person modell;
	private PersonManager controller;

	public GUI(PersonManager controller, Person modell) {
		this.modell = modell;
		this.controller = controller;
		this.modell.addObserver(this);
	}

	public void show() {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				// text field
				nameField = new JTextField(10);
				// button
				JButton nameButton = new JButton("Change name!");
				nameButton.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent arg0) {
						controller.changeName(nameField.getText());
					}
				});
				// label
				nameLabel = new JLabel(modell.getName());
				// panel
				JPanel panel = new JPanel();
				panel.add(nameField);
				panel.add(nameButton);
				panel.add(nameLabel);
				// frame
				frame = new JFrame("Swing MVC");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.add(panel);
				frame.pack();
				frame.setVisible(true);
			}
		});
	}

	@Override
	public void update(Observable o, Object arg) {
		if (o.getClass().equals(Person.class)) {
			nameLabel.setText(modell.getName());
		}
	}
}
Btw. ist hier das starten der GUI im EventDispatchThread so richtig?

Wenn ich nun mehrere Personen erstelle und diese mir in der GUI Reihe für Reihe anzeigen lassen möchte, wie kriege ich es dann hin, dass wenn sich eines dieser Objekte ändert, dieses aktualisiert wird?
 
S

SlaterB

Gast
> Btw. muss man hier immer selber die Methoden add, notify etc. implementieren oder gibt es da einen Trick?

ich denke viel besser wirds nicht,
man kann eine Basisklasse verwenden, meist hat man aber andere Aufgaben für Basisklassen

-----

tja, also mehrere Personen erstellen, in der main sicherlich in eine Liste stecken,
und dann musst du entscheiden, wie es weitergeht,

wichtig ist auf jeden Fall, dass nur eine GUI angezeigt wird,
willst du auch nur einen PersonenManager oder mehrere?
je nachdem kann man PersonenManager + GUI einfach eine Liste von Personen statt einer Person im Konstruktor übergeben
oder die Objekte etwas entzerren und statt Konstruktor unauffälligere Methoden wie gui.meldDichMalWiederBei(person); verwenden bzw. anderesrum
 

Marco13

Top Contributor
Btw. muss man hier immer selber die Methoden add, notify etc. implementieren oder gibt es da einen Trick?

Eigentlich muss man die GARnicht mehr implementieren, wenn man von Observable erbt ???:L
Aber wenn man viele verschiedene Modelle hat, oder spezifische Aufgaben erledigen will, kann bzw. sollte man sowieso nicht alles über die (vorgegebenen) Observer/Observable-Klassen abbilden, sondern in Erwägung ziehen, eigene Mechanismen dafür anzubieten. Und DANN muss man die add/notify/... Methoden selbst implementieren.

Wenn du mehrere Personen erstellst, brauchst du ja eigentlich auch mehrere GUI-Repräsentationen. Also, dann macht es u.U. keinen Sinn mehr, im GUI nur EINE Person zu haben....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Konzept des ActionListeners nicht verstanden AWT, Swing, JavaFX & SWT 3
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
M Mehrere Frames - hab ich das richtig verstanden AWT, Swing, JavaFX & SWT 4
E Jtablemodelevent habs nicht verstanden. AWT, Swing, JavaFX & SWT 3
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
X JavaFX Einfache FX Application, aber wie alte Features umgehen? AWT, Swing, JavaFX & SWT 10
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
D Passwort [Aber mit 3 Versuchen] Funktioniert nicht wie erwartet AWT, Swing, JavaFX & SWT 4
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX AnchorPane resizen, aber wie? AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid JFrame defokusieren aber im Vordergrund behalten AWT, Swing, JavaFX & SWT 0
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
J JFrame maximierbar aber nicht resizable AWT, Swing, JavaFX & SWT 6
D JTable markier- aber nicht veränderbar AWT, Swing, JavaFX & SWT 10
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
O getValueAt liefert "", aber es wird was angezeigt AWT, Swing, JavaFX & SWT 12
S JTable Zellinhalt markierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 4
V Swing Wochenplaner in Swing erstellen! Aber wie? AWT, Swing, JavaFX & SWT 13
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
L SWT Drop erfolgreich, aber GUI-Aktion abgebrochen AWT, Swing, JavaFX & SWT 4
G Swing resizeable aber nur y-Achse nur wie? AWT, Swing, JavaFX & SWT 5
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
propra Doppelklick von Einzelklick unterscheiden, aber richtig ... AWT, Swing, JavaFX & SWT 10
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
T speichern funktioniert,aber öffnen nicht AWT, Swing, JavaFX & SWT 2
C JFrame ohne Titelleiste, aber mit Borders AWT, Swing, JavaFX & SWT 2
M Fenster aufteilen, aber mit welchem LayoutManager? AWT, Swing, JavaFX & SWT 10
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
S Bilddatei kopieren, aber ohne verluste und ohne zu großen Speicherverbrauch AWT, Swing, JavaFX & SWT 17
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
J Swing JCheckBox enabled, aber graues Kästchen AWT, Swing, JavaFX & SWT 2
F Bild auf JPanel, aber wie? AWT, Swing, JavaFX & SWT 6
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
G SWT-App läuft nicht unter OSX, unter Win aber problemlos AWT, Swing, JavaFX & SWT 3
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
L Swing Serverbrowser, aber welche componenten? AWT, Swing, JavaFX & SWT 2
F In Textfeld Kommazahl anzeigen aber ohne Komma eingeben AWT, Swing, JavaFX & SWT 14
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
O Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons AWT, Swing, JavaFX & SWT 8
E Layout, aber welches? AWT, Swing, JavaFX & SWT 8
E Starten meiner GUI, aber wie? AWT, Swing, JavaFX & SWT 7
Developer_X Swing IndexOutOfBoundsException, aber warum?! AWT, Swing, JavaFX & SWT 15
Pithecanthropus [gelöst] JTree, aber nicht mit Strings, sondern mit Objects? AWT, Swing, JavaFX & SWT 2
T Choice "gezielt" darstellen aber wie - mit Koordinaten aber wie? AWT, Swing, JavaFX & SWT 6
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
T JComboBox 2 Spaltig, aber nur eine Anzeigen AWT, Swing, JavaFX & SWT 13
T Scrollbar wird nicht angezeigt - aber warum? AWT, Swing, JavaFX & SWT 3
J MouseEvts durch JLabel fallen lassen aber trotzdem Tooltips? AWT, Swing, JavaFX & SWT 5
T jtabel - Zeile selktierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 2
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
I TrayIcon aber bitte nur einmal AWT, Swing, JavaFX & SWT 2
S JTable audrucken, aber mit mehreren Footers und Headers AWT, Swing, JavaFX & SWT 2
J JScrollPane aber Scrollbars nicht sichtbar! *grrrrr* AWT, Swing, JavaFX & SWT 10
M DragAndDrop-Waypoints bewegen, ABER Bildschirm flackert AWT, Swing, JavaFX & SWT 3
L GUI, aber wie? AWT, Swing, JavaFX & SWT 2
C Jar Datei ist ausführbar aber zeigt keine icon's an AWT, Swing, JavaFX & SWT 18
A mehrere GridbagLayouts, aber wie? AWT, Swing, JavaFX & SWT 7
X JTextArea Text ausgeben mit setText(a) aber wie? AWT, Swing, JavaFX & SWT 3
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11
H Polyline zeichen, aber wie? AWT, Swing, JavaFX & SWT 2
L Warten, aber trotzdem "lebende" UI AWT, Swing, JavaFX & SWT 2
M Tab-Reihenfolge aber mit SWT AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben