Design - View & Controller

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hiho,

folgende Klassenstruktur hatte ich bevor ich vorm eigentlichen "Problem" stand diese Klassen ordentlich zu Verknüpfen:
Java:
public class MainFrame extends JFrame {

..
toolbar.add(new LoadPlacenamesAction());
..
}
Java:
public class MainPanel extends JPanel {

..
panel.add(new PlacenamesInfoView());
..
}
Java:
public class LoadPlacenamesAction extends AbstractAction {

..
Object[] data = GfeAccessor.readPlacenamesFromFile(fc.getSelectedFile()).toArray();
//Das nun an Placenamesview propagieren
..
}
Java:
public class PlacenamesInfoView extends JList {

}

So normalerweise hätte ich dafür nen Controller geschrieben. Dort würde sich die View registrieren und die Action müsste diesen dann ansprechen um die Daten rüberzuschieben.

Warum hab ich das nicht gemacht? Weil es ne Klasse mit nur einer Methode geworden wäre, welche wirklich wenig Code beinhalten würde. Weiterhin hätte ich Kopfstand machen müssen um den Controller sowohl bei der Action sowie bei der View bekannt zu machen. Da es sich dabei um 2 verschiedene Klassen handelt in welchen jeweils die View und die Action erzeuge müsste ich in in mindestens einem Fall über Delegation oder durchhangeln von getMethoden den Controller suchen. Das wollte ich vermeiden für diesen eher spärlichen Controller.

Was is da nun gestern in geistiger Umnachtung entstanden!?
Java:
package gfeGui.gui;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListSelectionModel;


public class PlacenamesInfoView {

	private static final long serialVersionUID = -4235373112632007502L;

	private static final JComponent view = setupViewComponent();

	
	/**
	 * Setup view for placenames.
	 */
	private static JComponent setupViewComponent() {
		JList list = new JList();
		
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.addMouseListener(new PlacenamesInfoView.ViewListener());
		
		return list;
	}//setup


	/**
	 * 
	 * @param data
	 */
	public static void setData(Object[] data) {
		DefaultListModel newModel = new DefaultListModel();
		
		for (Object o: data) {
			System.out.println(o);
			newModel.addElement(o);
		}
		
		((JList) view).setModel(newModel);
	}//setData
	
	
	/**
	 * 
	 * @return
	 */
	public static JComponent getViewComponent() {
		return view;
	}//getViewComponent
	
	
	/**
	 * 
	 * @author Marcus Wuensche
	 *
	 */
	private static class ViewListener extends MouseAdapter {

		@Override
		public void mouseClicked(MouseEvent e) {
			if (e.getClickCount() == 2) {
				if (e.getSource() == view)
				System.out.println(((JList) e.getSource()).getSelectedValue());
			}
		}//mouseClicked
	}//ViewListener
	
}//PlacenamesInfoView

Die Nutzung zum einbetten als Komponente erfolgt dann über getViewComponent, die Daten werden dann durch die Action mittels setData geändert.

So, das einzige was mich daran ein wenig stört, ich könnte theoretisch dem Rückgabewert von getViewComponent eine neue JComponent zuweisen (schon probiert - trotz final). Hätt ich nun nicht erwartet, aber nun weiss ichs ja :) Weiterhin könnte ich natürlich von überall die setData-Methode aufrufen. Wenn ich den Controller aber per getMethoden suchen würde, dann könnte ich das genauso. Delegation wäre da wohl die sicherste Lösung für das Problem.

Seht ihr in diesem Konzept noch weitere Nachteile? Wie gesagt für mich macht es nicht mehr Sinn, wegen 3 Zeilen Logik nen Controller zu schreiben.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
WAS genau soll der Controller können? Den so als quasi-Singleton komplett statisch zu machen sieht IMHO nach bogus aus. Dass ein Controller nur wenige Zeilen hat, ist nicht ungewöhnlich. Häufig schreibt man z.B. anonyme Listener - das SIND (meiner Definition nach) kleine Controller.
 

diggaa1984

Top Contributor
also der Controller wird wohl doch ein wenig umfangreicher, da er bestimmte Prüfungen vornehmen wird (Ergebnis der Datenmanipulation - erfolgreich oder nicht, eventuell Nachricht an eine Log-Komponente). Also nach 2 Tagen fällt mir echt kein gutes Konzept ein um das einigermaßen passend zu verknüpfen, das statische Zeug ist auch schon wieder raus ^^, weil richtig gefallen hats mir auch net.

Was mir eben die Probleme bereitet ist, dass ich in 2 versch. Klassen Instanzen erzeuge (Action und View), welche dann mit einem Controller verknüpft werden sollen.
Allerdings habe ich weitaus mehr Views, welche per Controller gesteuert werden könnten, als in dem Bsp genannt. Am Ende könnte ich so mind. 6-8 Views haben, welche jeweils andere Infos widerspiegeln.

Und da wärs mir schon wichtig ein einigermaßen gutes Konzept dahinter zu legen.
Im MainFrame bau ich die Toolbar ... du kannst dir ja sicherlich denken, dass da noch ein paar mehr Actions zum Tragen kommen.
Im Mainpanel instanziiere ich die Views. Das Design lässt sich noch problemlos in einer Klasse erledigen, das ist nicht so komplex.

Was mir noch einfallen würde wäre sowas wie:
MainController instanziiert alle möglichen Controller
Maincontroller geht ans Frame und ans MainPanel, und dort gebe ich den jeweils andere Controller weiter. Kann aber nicht das Gelbe vom Ei sein oder?! :D

Ist schon eine verflixte Thematik mit dem Design
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
L JavaFX GUI Design AWT, Swing, JavaFX & SWT 6
W WindowBuilder / Design-Vorschau schneidet den Rand ab AWT, Swing, JavaFX & SWT 0
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
B Design Umsetzung AWT, Swing, JavaFX & SWT 1
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
L LookAndFeel Eigenes Design für die Applikation AWT, Swing, JavaFX & SWT 4
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
T JavaFX "DefaultButton"-Design ändern AWT, Swing, JavaFX & SWT 8
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
N GUI Design ohne GUIDesigner AWT, Swing, JavaFX & SWT 10
D GWT Design AWT, Swing, JavaFX & SWT 0
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
U WindowBuilder "Design-Tab" AWT, Swing, JavaFX & SWT 2
P LayoutManager Design meines Projekts (hätte wer zeit?) AWT, Swing, JavaFX & SWT 9
G Eclipse: Design Tab wird nicht mehr angezeigt AWT, Swing, JavaFX & SWT 4
M Design in Java umsetzen AWT, Swing, JavaFX & SWT 3
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
W LayoutManager Clientfenster ins Design einbinden AWT, Swing, JavaFX & SWT 13
B LayoutManager GUI-Design: eventuelle Alternativen zum Verschachteln + Ansprechen von JPanel()? AWT, Swing, JavaFX & SWT 2
F JSlider Design ändern AWT, Swing, JavaFX & SWT 6
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
G Grundsatzfrage GUI-Design AWT, Swing, JavaFX & SWT 6
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
tuttle64 Design für mehrere Sprachen in Swing AWT, Swing, JavaFX & SWT 15
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
M Special design of Swing components AWT, Swing, JavaFX & SWT 14
KrokoDiehl Swing Design-Frage: eigenes Line-Wrapping AWT, Swing, JavaFX & SWT 5
T Design mit vielen Feldern AWT, Swing, JavaFX & SWT 2
eskimo328 Moderne Swing GUI mit Web ähnlichem Design AWT, Swing, JavaFX & SWT 7
M Nochmal Swing, MVC und generelles Design AWT, Swing, JavaFX & SWT 2
S JTree Design Problem AWT, Swing, JavaFX & SWT 5
S Design problem AWT, Swing, JavaFX & SWT 2
K Design von verschiedenen Rechnern AWT, Swing, JavaFX & SWT 13
A Design Problem bei verschiedenen Oberflächen AWT, Swing, JavaFX & SWT 3
Steev Standard Design bei JFrame und AWT AWT, Swing, JavaFX & SWT 7
M Design von Elemente? AWT, Swing, JavaFX & SWT 16
T Allgemeine Frage - innovatives GUI Design AWT, Swing, JavaFX & SWT 6
P Swing-Komponenten - Standart-Windows Design? AWT, Swing, JavaFX & SWT 4
B Swing - Design Patterns AWT, Swing, JavaFX & SWT 3
S "Zerstörtes" gbl-Layout (Design) AWT, Swing, JavaFX & SWT 10
D professionelles GUI-Design als Skeleton Pro AWT, Swing, JavaFX & SWT 2
A Applikation mit Netbeans-Design AWT, Swing, JavaFX & SWT 4
R JDialog hat seltsames Design AWT, Swing, JavaFX & SWT 6
L Design-Probleme (Swing-Anfänger) AWT, Swing, JavaFX & SWT 6
M Look&Feel - Layout - GUI - Design - SAP LnF :) AWT, Swing, JavaFX & SWT 12
M Frage bzgl. Formular-Design. AWT, Swing, JavaFX & SWT 2
R Programm an Design anpassen. AWT, Swing, JavaFX & SWT 4
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
M JavaFX - Array in View auslesen AWT, Swing, JavaFX & SWT 12
4a61766120617274697374 dynamische Tree View AWT, Swing, JavaFX & SWT 2
H JavaFX Ein View vorschalten Exception AWT, Swing, JavaFX & SWT 7
M SWT View nicht mehr sichtbar AWT, Swing, JavaFX & SWT 2
G JavaFX "Framework" zur View Ersellung AWT, Swing, JavaFX & SWT 0
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
T View AccessibleContext AWT, Swing, JavaFX & SWT 0
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
S Swing JPanel in View ersetzen AWT, Swing, JavaFX & SWT 10
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
L View aus dem MVC ist immer die GUI? AWT, Swing, JavaFX & SWT 5
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
Rudolf Swing Baut die View die Modelebene auf oder wer? AWT, Swing, JavaFX & SWT 13
G Swing MVC / View - Controller AWT, Swing, JavaFX & SWT 7
N MVC - Logik zum Verändern der View AWT, Swing, JavaFX & SWT 8
V Eclipse View Right-Click Menu hinzufügen AWT, Swing, JavaFX & SWT 2
D Drag-Action: Innerhalb meiner View? AWT, Swing, JavaFX & SWT 3
C SWT-Elemente an View-Fenster angleichen und automatisch resizen AWT, Swing, JavaFX & SWT 3
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
R Model View Controller Konzept AWT, Swing, JavaFX & SWT 2
R Swing Designfrage - Zusammenspiel Model / View AWT, Swing, JavaFX & SWT 10
J Swing SwingActions und das Problem auf den View bzw. das Model zuzugreifen AWT, Swing, JavaFX & SWT 2
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
M Swing Model an View binden AWT, Swing, JavaFX & SWT 4
M Swing Von einem Controller aus View-Elemente ändern AWT, Swing, JavaFX & SWT 11
H Swing JScrollPane mit JPanel als View AWT, Swing, JavaFX & SWT 3
B Sudokuartiger View (RadiobuttonTableView) mit JFace Viewer? AWT, Swing, JavaFX & SWT 3
N FileChooser in View AWT, Swing, JavaFX & SWT 3
F Swing J(X)Table Spalten umsortieren NUR im View (Wie finde ich eine Spalte nach Name?) AWT, Swing, JavaFX & SWT 3
hdi Swing JTable & Filtern: Daten nicht in der View AWT, Swing, JavaFX & SWT 2
B SWT Textdatei Lesen und Anzeige in View - Zeichensatzproblem AWT, Swing, JavaFX & SWT 4
H Eclipse View / Window Layout AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben