# Welche Technik bei grafischer Darstellung



## Nordevil (4. Mai 2009)

Hallo,

ich soll in einem Projekt eine Webanwendung entwickeln, die Zusammenhänge von Objekten grafisch darstellt. Die Objekte und die Zusammenhänge sind in einer Datenbank gespeichert. Die verschiedenen Objektstränge (Objekte, die zusammen gehören) sollen je nach Auswahl des Objektes dynamisch auf einer Webpage ausgegeben werden.

Das Hauptaugenmerk liegt ganz klar auf der grafischen Darstellung. Die zusammengehörigen Objekte sollten auf jeden Fall miteinander verbunden sein. Der Objektstrang sollte übersichtlich dargestellt werden. Es kann z.B. auch mehrere Objekte in einer Spalte geben. Das i-Tüpfelchen wäre natürlich, wenn man ein Objekt auswählt, dieses dann mit den verbundenen Objekten in den Vordergrund rückt und sich der Rest verdunkelt, so wie es manchmal bei Fotogalerien zu finden ist.

Mir geht es hierbei erst einmal um die Technik, mit der ich Zusammenhänge grafisch darstellen könnte. Kann man so etwas mit Java, JavaScript, Ajax, etc. realisieren? Kann mir vielleicht jemand sagen, welche Bibliotheken ich dafür brauche oder ob es andere Techniken gibt? Ich habe schon Recherche betrieben, aber bis jetzt noch nichts passendes gefunden. Ich hoffe auch Eure Hilfe. Vielen Dank schon einmal im Voraus!


Greetz
Nordevil


----------



## Rydl (4. Mai 2009)

klingt recht anspruchsvoll. eventuell ist ein flash-front-end da einfacher zu realisieren, als ein komplexes html/javascript-gebilde. es ginge auf jeden fall auch mit html...
es gibt für die verschiedenen auf jsf aufbauenden frameworks, wie richfaces, komponenten, die dir mal ganz fix diagramme anzeigen lassen, aber dein relationship-diagramm ist da glaube eine nummer zu groß für, mir ist jedenfalls keine komponente bekannt, die sowas könnte  von daher kann ich dir jetzt auch keine lib oder technik nennen... wie gesagt, such dir jemanden, der sich mit flash auskennt, das wird wohl das einfachste sein!


----------



## Noctarius (4. Mai 2009)

Ich würde sowas mit ein paar Custom XTemplates und GXT (Ext GWT) bauen 
Bauen in Java pur (bis auf die XTemplates) und dann alles automatisch nach HTML / JavaScript kompilieren lassen

Ext GWT - Java Component Library


----------



## Nordevil (4. Mai 2009)

OK, vielen Dank für die beiden schnellen Antworten. Kannte ich beides noch nicht. Auf Flash wäre ich jetzt auch nicht gekommen, ist aber sicherlich eine Möglichkeit, gerade was das Grafische angeht. Mit XTemplates und GXT habe ich bis jetzt noch nichts zu tun gehabt. Scheint aber sehr mächtig zu sein. Gibt es dazu evtl. eine kleines Tutorial?

Ich bin natürlich weiterhin für andere Ansätze offen. Wer also noch einen Einfall hat, immer her damit!


----------



## ps (5. Mai 2009)

Ich würde sowas (natürlich) mit Java bauen... die NetBeans Visual Library bietet hierfür eine sehr gute Basis:
-> graph: netbeans.org : NetBeans Visual Library 2.0

Wenn es unbedingt eine Webseite sein muss dann kann man es ja als Applet verfügbar machen. Oder als Java Webstart. Bitte nicht von dem angestaubten Begriff "Applet" abschrecken lassen - die sind seit JavaFX wieder sehr brauchbar 

HTML / Javascript ist dafür nicht gemacht... flash wäre aber sicher noch eine Alternative.

[edit: die NB Visual Library ist natürlich auch ausserhalb der NB Platform benutzbar...)


----------



## HLX (7. Mai 2009)

Applets oder Webstart ist durchaus möglich. Man sollte allerdings berücksichtigen, dass eine JVM auf dem Client Voraussetzung ist. Für Flash wird ein Plugin benötigt.

Über JavaScript lässt sich sowas mittlerweile auch einiges machen. Ich kann hier ebenfalls GWT empfehlen: Entwicklung in Java, anschließend Code-Übersetzung per Cross-Compiler in JavaScript. Es gibt zahlreiche Erweiterungen (teilweise unter Google-Code gehostet), die anspruchsvollere Darstellungen ermöglichen. Für typische "Desktop-Anwendungen" würde ich die Erweiterung GXT von ExtJS nehmen. Hier ist allerdings zu beachten, dass sie unter GPL v3 steht.


----------



## neonfly (7. Mai 2009)

Alternativ kannst du dir die Zusammenhänge am Server mit Java 2D erzeugen (Bilder) und dann an den Client schicken (Anzeige von Bildern mit HTML).


----------



## ps (10. Mai 2009)

HLX hat gesagt.:


> Applets oder Webstart ist durchaus möglich. Man sollte allerdings berücksichtigen, dass eine JVM auf dem Client Voraussetzung ist. Für Flash wird ein Plugin benötigt.



Ich weiß nicht, die Hürde den Inhalt zu Gesicht zu bekommen ist sehr klein. Plugin fehlt? Browser fragt nach ob du es installieren möchtest.



> Über JavaScript lässt sich sowas mittlerweile auch einiges machen. Ich kann hier ebenfalls GWT empfehlen: Entwicklung in Java, anschließend Code-Übersetzung per Cross-Compiler in JavaScript. Es gibt zahlreiche Erweiterungen (teilweise unter Google-Code gehostet), die anspruchsvollere Darstellungen ermöglichen. Für typische "Desktop-Anwendungen" würde ich die Erweiterung GXT von ExtJS nehmen. Hier ist allerdings zu beachten, dass sie unter GPL v3 steht.



Es ist sicher möglich, aber mir ist keine Bibliothek bekannt mit welcher ich grafische Objektgeflechte darstellen und darin navigieren kann. Das in JS zu programmieren ist doch ein erheblicher Aufwand und ich bin mir nicht so sicher ob man sich das wirklich antun möchte... stelle mir die usability ziemlich schrecklich vor.

Wenn ich nochmal drüber nachdenke würde ich es wohl tatsächlich in JavaFX realisieren. Die NB Visual Library welche ich oben angesprochen habe hat die API von JavaFX wohl inspiriert, sie sind recht ähnlich - aber mit JavaFX Script programmiert es sich unter umständen leichter.


----------



## HLX (11. Mai 2009)

ps hat gesagt.:


> Ich weiß nicht, die Hürde den Inhalt zu Gesicht zu bekommen ist sehr klein. Plugin fehlt? Browser fragt nach ob du es installieren möchtest.


Sicher. Das ist nicht unbedingt ein Problem. Es könnte allerdings sein, dass diese Technologie vom Betreiber/Kunden von vornherein ausgeschlossen wird. 



ps hat gesagt.:


> Es ist sicher möglich, aber mir ist keine Bibliothek bekannt mit welcher ich grafische Objektgeflechte darstellen und darin navigieren kann. Das in JS zu programmieren ist doch ein erheblicher Aufwand und ich bin mir nicht so sicher ob man sich das wirklich antun möchte... stelle mir die usability ziemlich schrecklich vor.


GWT wird nicht in JS sondern in Java programmiert. Hier ist z.B.eine Erweiterungs-Bibliothek, mit der man so etwas angehen könnte:
gwt-connectors - Google Code


----------



## ps (17. Mai 2009)

> Sicher. Das ist nicht unbedingt ein Problem. Es könnte allerdings sein, dass diese Technologie vom Betreiber/Kunden von vornherein ausgeschlossen wird.



Ja, könnte sein. Dann wäre es unser Job dem Kunden zu erklären wo die Vor- und Nachteile der entsprechenden Technologien liegen. Und hier überwiegen die Vorteile einer Plugin-Tech wie JavaFX oder Flash bei weitem!

Ich kenne keinen Kunden der auf seinen Technologievorgaben sitzengeblieben ist wenn der Aufwand damit signifikant höher gewesen wäre. Wenn sich an den Vorgaben nicht rütteln lässt werden meist auch nicht solche ungewöhnlichen Anforderungen beschrieben (dyn. Grafik mit Editierfunktion in JS ist einfach nicht gängige Technologie, und ich habe sowas auch noch nirgendwo gesehen)



HLX hat gesagt.:


> GWT wird nicht in JS sondern in Java programmiert. Hier ist z.B.eine Erweiterungs-Bibliothek, mit der man so etwas angehen könnte:
> gwt-connectors - Google Code



Ja, man programmiert in Java - aber nur um es dann in JavaScript zu kompilieren. Und AFAIK kennt der GWT compiler kein Swing, und auch kein Java2D. Und selbst wenn wäre es sehr aufwändig die Funktionalität selbst zu proggen (ohne libs wie NB Visuals API).

Die Erweiterungslib sieht allerdings interessant aus, könnte klappen. Man muss aber noch einiges an Aufwand reinstecken um es an die gewünschten Anforderungen anzupasssen. Frage mich auch ob das Sinn macht, vor allem Performance dürfte Probleme machen bei der Grafikausgabe.


----------



## HLX (17. Mai 2009)

ps hat gesagt.:


> Ja, könnte sein. Dann wäre es unser Job dem Kunden zu erklären wo die Vor- und Nachteile der entsprechenden Technologien liegen. Und hier überwiegen die Vorteile einer Plugin-Tech wie JavaFX oder Flash bei weitem!


Dem stimme ich aus Entwicklersicht durchaus zu. Kunden setzen allerdings manchmal andere Prioritäten.



ps hat gesagt.:


> Ich kenne keinen Kunden der auf seinen Technologievorgaben sitzengeblieben ist wenn der Aufwand damit signifikant höher gewesen wäre.


Der Aufwand ist für den Kunden nur ein Argument. Meist werden verschiedene Anforderungen an eine Anwendung gestellt. Rechenzentralen legen z.B. großen Wert auf die Nutzung vorhandener Infrastruktur und die Einhaltung von Sicherheitsvorgaben. Kunden dieser Größenordnung können es sich auch leisten, Flash oder Java-Runtimes auf Einzelplatz-Rechnern auszuschließen. Entstehende Kosten für Softwareverteilung/Wartung/Support von z.B. der JRE gleichen für den Kunden den u.U. höheren Softwarepreis aus. 



ps hat gesagt.:


> Wenn sich an den Vorgaben nicht rütteln lässt werden meist auch nicht solche ungewöhnlichen Anforderungen beschrieben (dyn. Grafik mit Editierfunktion in JS ist einfach nicht gängige Technologie, und ich habe sowas auch noch nirgendwo gesehen)


Ich hab´s schon gesehen, allerdings nicht mit der von mir genannten Bibliothek. Performance war ok.


----------



## Nordevil (16. Okt 2009)

Der letzte Beitrag ist zwar schon eine Weile her, aber das Thema ist bei mir immer noch aktuell. Vielen Dank erste einmal für die rege Beteiligung und fundierte Diskussion.

So, ich habe mir die einzelnen Links und Beispiele noch einmal angesehen. Da sind echt klasse Sachen dabei. Meistens ist es aber so, dass man prima mit den Objekten und Verbindungen interagieren kann, wie z.B. die Objekte verschieben, die Linien ändern, etc. Das brauche ich aber gar nicht, bzw. ich gar nicht gewollt. Die Objekte sollten immer an der selben Stelle (Spalte) bleiben und die Verbindungen werden aus der DB geladen und müssen nicht manuell geändert werden.

Auf meiner Suche im Web habe ich noch folgende Bibliothek gesehen:
JavaScript, DHTML: Linie, Ellipse, Kreis, Polygon, Dreieck, Rechteck, Polyline zeichnen

Die gibt es wohl schon recht lang und hatte zu Anfang derbe Performance-Probleme, mit aktuellen Rechnern ist das aber wohl kein Problem mehr. Es ist zwar keine schöne Lösung die Linien mit 1x1 px divs zu machen, aber möglich. Kennt von Euch einer die Library und hat sie vielleicht schon einmal verwendet? Mich interessiert hierbei auch nur die Linie, die ich von Punkt a nach b zeichnen kann. Gibt es derartige andere Alternativen? Vielleicht auch bei den schon vorgestellten Sachen, nur dass ich diese noch nicht gesehen habe?

Vielen Dank schon einmal wieder im Voraus!

Greetz
Nordevil


----------

