Zeichnen eines Baums: Unklarheiten bezüglich MVC

Status
Nicht offen für weitere Antworten.

-frank

Bekanntes Mitglied
ich möchte einen komplexeren baum zeichnen. es gibt knoten, die wiederum kinderknoten haben. die verbindungen zwischen den knoten sollen ebenfalls grafisch dargestellt werden. die darstellung einzelner knoten ist recht aufwändig, da innerhalb dieser knoten wieder weitere objekte (--> also weitere JComponents) dargestellt werden müssen, wobei hier auch die anzahl variiert.

mir gehts es nun um das design im hinblick auf das MVC-pattern (worüber ich nicht viel weiß/wusste - ich kannte nur den grundsatz, GUI von BusinessLogic zu trennen). Nun habe ich mir mal diesen guide (http://java.sun.com/products/jfc/tsc/articles/architecture/#modified_mvc) durchgelesen (allerdings nicht alles über LookAndFeel) und auch hier im Forum ein wenig gesucht. mir ist jedoch noch einiges unklar.

1. sollte man den Controller (in der regel) nun vom View trennen (--> eigene klassen) oder nicht. für mich bietet es sich allein der übersichtlichkeit wegen an, weil die von JPanel abgeleitete klasse TreePanel, die den Baum zeichnet, groß geworden ist und ich ne eigene Controller-Klasse gemacht habe, die Action/MouseListener für TreePanel spielt und befehle an das model weiterleitet.
also ich denke, dass dies okay ist, auch wenn im SwingMVC oft keine Trennung zwischen View und Controller besteht (wenn ich das richtig verstanden habe).

2. mein design funktionierte bisher so, dass die hauptklasse der businesslogic, ich nenne sie mal TreeModel (aber nicht das TreeModel aus der JavaApi) der GUI, also TreePanel, ganz genau sagte, was sie zu tun hat. also zb.:
addNode(Node newNode, Node parentNode);

gemäß swing-MVC werde ich das jetzt umdrehen:
TreePanel kennt Model und nicht umgekehrt. TreePanel implementiert TreeModelListener und added sich als Listener beim TreeModel. das Model bzw. die BusinessLogic sagt dem Listener nur, dass sich etwas geändert hat bzw auch was genau (--> stateful notification), aber es gibt keine befehle à la deleteNode(Node). stattdessen gibts nur ne notification, dass der node gelöscht wurde.
das würde MVC entsprechen, richtig?

3. da die einzelnen knoten wie gesagt komplex sind und nicht nur ein punkt/kreis, sollte ich das wohl analog zum treepanel machen: die Node-Datenobjekte in der BusinessLogic sollten bei änderungen ihre nodelistener informieren. nodelistener wird das nodepanel sein, das die darstellung eines knotens übernimmt.
--> für alle komplexeren objekte model + view machen?

4. das baum-model sieht so aus, dass jeder knoten referenzen zu seinen kinderknoten hat. die verbindungsinformation ist also teil eines Node-Objekts. in der GUI gehört die verbindungsinformation aber nicht zum View des Knoten, also NodePanel, sondern zum TreePanel. (denn die verbinundslinie wird ja zwischen den knoten gezeichnet, also im treepanel)
wie soll ich das nun lösen?
1. treepanel implementiert NodeModelListener und lässt sich ebenfalls über änderungen von nodes informieren(interessiert sich aber nur für verbindungsänderungen)
2. treemodel implementiert NodeModelListener und informiert dann über diesen Umweg TreePanel.
3. eine eigene klasse NodeConnectionModel, diese added sich als listener bei NodeModels und informiert TreePanel, das sich als NodeConnectionModelListener beim NodeConnectionModel geaddet hat, bei veränderungen.

nummer 3 scheint mir am aufwändigsten aber auch am flexibelsten für die zukunft. könnte ja zb auch sein, dass die daten anders gespeichert sind und es ein "echtes" treemodel gibt.

5. wie sieht es mit den controllern aus? soll es da auch ne hierarchie geben?
das problem ist im gegensatz zur reinen darstellung, dass es hier ja nicht nur um das eine model bzw. um den einen controller geht, denn zb kann man sich zu einem knoten ein kontextmenü anzeigen lassen. der inhalt dieses kontextmenüs ist aber abhängig von früheren befehlen (also zb, ob ein anderer knoten bereits selektiert ist).
--> entweder ich habe nur einen übergeordneten controller, der alles koordiniert oder jeder node (und eventuell auch objekte in den nodes), kriegen einen. Diese müssten dann aber entweder informiert werden über den aktuellen Stand der Dinge oder Aktionen, die nicht 100% nur den einen JComponent betreffen, müssten in der controllerhierarchie weitergeleitet werden. --> ein controller kennt seinen parent controller. (ist das üblich?)

(eine weitere möglichkeit wäre wohl, dass ich aktuelle aktionen (also zb eine selektion eines knoten) schon in das model schreibe. treemodel würde dann also den selektierten knoten kennen. ich denke aber, dass erst fertig eingegebene befehle vom controller an das model weitergeleitet werden sollten)

ich denke mir, dass in den meisten fällen nur der übergeordnete Controller einen befehl verarbeiten wird und somit ein einzelner controller ausreichen würde. andererseits könnte ich mir vorstellen, dass man zb bei einem nodepanel die interne darstellung des nodes wechseln können möchte. das betrifft dann nur einen knoten und davon sollte der treecontroller eigentlich nix mitbekommen...
--> gehe ich recht in der annahme, dass es hier einfach stark darauf ankommen wird, wieviel funktionalität ich benötigen werde?

ich hoffe, dass irgendjemand die zeit hat sich das durchzulesen und eventuell ein paar tipps hat ;)
danke schon mal!
 

-frank

Bekanntes Mitglied
leider hat noch niemand geantwortet. eventuell ist das posting einfach zu lang ;)

wenn jemand doch kurz zeit findet, würde mich speziell punkt interessieren, also ob man vom MVC-Design her eher viel controller macht + eine controller hierarchie (sprich controller kennen sich untereinander) oder ob das unüblich ist bzw. obs da wenig vorgaben gibt.
dass viele wege zum ziel führen, ist mir klar. mir ist aber gerade auch beim schreiben dieser mail wieder einmal klar geworden, dass bestehende, durchdachte und erprobte patterns verdammt viel sinn machen können. von daher würde ich es gerne richtig machen.
 

Wildcard

Top Contributor
-frank hat gesagt.:
wenn jemand doch kurz zeit findet, würde mich speziell punkt interessieren, also ob man vom MVC-Design her eher viel controller macht + eine controller hierarchie (sprich controller kennen sich untereinander) oder ob das unüblich ist bzw. obs da wenig vorgaben gibt.
Schau dir einfach mal Swing an:
JTable, JPanel, JFrame, JButton,... sind alles Controller. Ich würde mal sagen du baust dir mit diesen Bausteinen regelmäßig eine Hierarchie aus Controllern auf während die eigentliche View (Renderer, Delegates, etc) ziemlich vor dir versteckt sind. :wink:
 

-frank

Bekanntes Mitglied
Wildcard hat gesagt.:
Schau dir einfach mal Swing an:
JTable, JPanel, JFrame, JButton,... sind alles Controller. Ich würde mal sagen du baust dir mit diesen Bausteinen regelmäßig eine Hierarchie aus Controllern auf während die eigentliche View (Renderer, Delegates, etc) ziemlich vor dir versteckt sind. :wink:

naja, wenn ich bisher ne GUI gemacht hab (meist nur auf die Schnelle, weil die GUI nie wichtig war), hab ich meist zb ein JPanel als ContentPane des Frames gehabt und wenn da dann mehrere Buttons drin waren, Mausaktionen überwacht werden muss, Keys, etc., dann hatte ich meist eine zentrale Klasse (--> meist das JPanel aus der ContentPane selbst, das ich einfach erweitert habe + Mouse/ActionListener implementiert), die all diese Dinge regelt und überwacht. so gesehen hatte ich da nur einen Controller. oder verstehe ich den Begroiff Controller falsch?
 

Wildcard

Top Contributor
Es ging mir nicht darum wie du das umgesetzt hast, sondern wie es in Swing gemacht wird.
Ein JPanel hat zB einen JButton, ein JLabel und einen JTree. Alles sind lediglich Controller, eine Controllerhierarchie ist also nichts ungwöhliches.
 

-frank

Bekanntes Mitglied
Wildcard hat gesagt.:
Es ging mir nicht darum wie du das umgesetzt hast, sondern wie es in Swing gemacht wird.
Ein JPanel hat zB einen JButton, ein JLabel und einen JTree. Alles sind lediglich Controller, eine Controllerhierarchie ist also nichts ungwöhliches.

ok, danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
Z Zeichnen eines Rechtecks AWT, Swing, JavaFX & SWT 7
K Punkte eines Funktionsplotters zeitlich versetzt zeichnen AWT, Swing, JavaFX & SWT 18
S auf einem mit Netbeans (GUI) erstellten JPanel (eines JFrames) zeichnen? AWT, Swing, JavaFX & SWT 7
R Probleme beim Zeichnen eines Koordinatensystems AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Polygons AWT, Swing, JavaFX & SWT 2
R JPanel - zeichnen eines Arrays AWT, Swing, JavaFX & SWT 18
W Instanz eines Steuerelementes an zwei Stellen zeichnen AWT, Swing, JavaFX & SWT 3
G Auf Graphic-Context eines bestimmten JPanels zeichnen AWT, Swing, JavaFX & SWT 3
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen


Oben