Grafikmodell

Hi Leute,

Ich habe eine Frage bzgl. des Vorgehens bei der Darstellung von Grafischen Objekten.

Vorhaben:
Folgendes habe ich vor. Ich möchte ein Programm schreiben, was im Aussehen so ähnlich ist, wie ein UML - Klassen -Diagramm, d.h. es sollen Objekte dargestellt werden, diese mit Pfeilen miteinander verbudnen werden usw. Jedes Objekt soll dabei mit Daten verbunden sein, die zu diesem objekt abgelegt sind.

Derzeitiger Plan:
Momentan stelle ich mir das so vor, dass ich so eine Art 'Modell' Objekt habe, das Informationen über die Position, Größe, Inhalte, ein Text und weitere Ausprägungen. Diese Modell- objekte erzeuge ich, präge sie aus und zeichne dann, z.B. nach Erzeugung eines neuen Modell- Objekts die Grafiken neu. Wobei meine Idee z.Z. so ist, dass ich ein JPanel als 'Zeichenfläche' nehme und dort alle 'Modell' Objekte aufzeichne, die ich in meinen Vorrat halte. Die Objekte sollen auf der Zeichenfläche verschiebbar und in der Größe änderbar sein. Außerdem soll per Doppelklick die Ausprägung des Modellobjekts geändert werden (beispielsweise der Text zum Objekt).

Frage:
Meine Frage ist nun, bin ich auf dem richtigen Weg mit meinem Vorgehen? Oder kann mir jedmand sagen, wie ich das richtig machen soll? Mein Problem ist, dass wenn ich bsplw. ein Objekt verschiebe, alle Objekte neu gezeichnet werden, was ich irgendwie als zu heavy empfinde ?!

Sorry, dass ich solche Fragen stelle, ich habe bisher nur mit Komponenten, die feste Positionen haben, gearbeitet. Dies hier geht in eine Richtung, die ich noch nicht wirklich zuordnen kann und alle Tutorials die ich gefunden habe beziehen sich auf die Darstellung von komponenten oder das Zeichnen einfacher Objekte innerhalb der paint() Methode, nicht aber von Objektkonstellationen.

Vielen Dank im Voraus,

Jens
 

Cola_Colin

Top Contributor
Ich vermute mal, dass die Objekte nicht so aufwendig zu zeichnen sind, als das es nicht möglich wäre alles neu zu zeichnen, wenn sich etwa ändert ?!
Wenn du wirklich nur das Objekt neuzeichnen willst, das sich geändert hat, dann musst du ja zuerst die alte Version irgendwie rauslöschen, das wäre aber sicher kaum weniger aufwendig als einfach alle neuzuzeichnen.

Ich würde mir eine Liste mit allen Objekten machen und die dann in der OnPaint Methode vom JPanel der Reihe nach alles neuzeichnen. Eventuell mit nem Doublebuffer, sonst flackert es, wenn man Objekte verschiebt oder sowas.
 

Landei

Top Contributor
Ich habe sowas mal geschrieben. Dabei ist erst einmal wichtig, dass du das "Model" von der Grafik trennst, also die dargestellten Objekte nichts davon "wissen", dass sie gezeichnet werden. Für das Zeichnen selbst sehe ich zwei Ansätze: Entweder die Zeichenfläche verhält sich wie ein Container, dem man Komponenten zum Zeichnen der Objekte übergibt, oder die Zeichenfläche zeichnet alles selber. Obwohl der erste Ansatz erstmal OO-technisch besser klingt, habe ich die zweite Variante implementiert und bin damit eigentlich zufrieden. Falls du natürlich verschiedene Typen von Unterobjekten hast, verschiedene Arten von Verbindungslinien u.s.w., wäre wahrscheinlich die Container-Variante vorzuziehen.

Vielleicht kannst du auch auf eine vorhandene Bibliothek zurückgreifen?
 
Hi,

ich danke Euch schon mal für die Antworten. Ich werde mir das mal durch den Kopf gehen lassen. Mich beruhigt erstmal, dass ich nicht vollkommen verkehrt denke... :)

Das mit der vorhandenen Bibliothek werde ich mal prüfen, wobei ich noch keine Ahnung habe, wonach ich suchen muss.

Wie gesagt, ich danke Euch und werde mich wieder melden :)

VG,

Jens
 

Landei

Top Contributor
So sieht's momentan bei mir aus, aber der Code ist so speziell und teilweise wüst, der würde dir nicht viel bringen. wenn du bestimmte Sachen brauchst, suche ich dir lieber die entsprechenden Schnipsel raus.
 

Oben