Ich musste einmal ein Gantt-Diagramm von 150 Maschinen und 100.000 Aufgaben anzuzeigen. Ich schrieb ein benutzerdefiniertes Java-Applet mit benutzerdefinierten Rendering und die Datenübertragung wurde von http + Java Serialisierung API behandelt. Ich fand, dass jede andere Lösung (SVG, VML, Flash, Image-Tags) einfach zu langsam und schwer zu bedienen war.
aktualisieren: Here ist ein Bild, wie es aussieht. Leider für die Community war dies ein Industrieprojekt, daher ist der Quellcode nicht öffentlich. Ich kann nur einige Konzepte darüber teilen.
Der Diagrammbereich besteht aus verschiedenen Komponenten: horizontalen und vertikalen Bildlaufleisten, dem Diagrammbereich, der Zeitbeschriftung und den beiden Tabellen auf jeder Seite. Diese Komponenten sind über Ereignishandler miteinander verknüpft. Wenn man scrollt/ändert, wirkt sich das auf die anderen aus. Das Gantt-Diagramm besteht aus gefüllten Rechtecken, in denen die Farbe den Status der Aufgabe angibt. Das Rendern erfolgt in der paint() -Methode, indem jede sichtbare Zeile und die anzeigbaren Start-End-Daten durchlaufen werden. Das Rendern verwendet aggressives Clipping, anstatt die Clipping-Funktion von Graphics2D zu verwenden. Die Benutzer können die Ansicht schwenken und zoomen.
Die Daten werden in einer serialisierbaren Datenstruktur gespeichert. Der serverseitige Java-Code enthält einen Cache für die gesamte Datenstruktur. Diese Struktur wird alle 30 Sekunden aktualisiert, aber nur die Unterschiede werden aus der Backing-Datenbank abgerufen. Die Daten werden dann von dem Applet abgefragt, in das Gantt-Modell integriert, serialisiert und zur Client-Seite zurückgeführt. Die Datenaktualisierung auf der Client-/Applet-Seite erfolgt nicht automatisch: Benutzer müssen auf die Aktualisierungsschaltfläche klicken, damit sie das Bild ohne unerwartete Änderungen auswerten können.
Das Rendern eines Gantt-Diagramms benötigt nicht so viele Fancyness - fillRect, AlphaComposite, drawLine. Wenn Sie komplexere Bilder benötigen, müssen Sie bei meiner Vorgehensweise mehr Kodierung vornehmen.
JFreeChart vielleicht nicht die beste Wahl für Live-Daten wie die FAQ heißt es, dass es nicht wirklich Echtzeit Charting unterstützt. – Mark
Ja, nahezu Echtzeit ist eine Schlüsselanforderung. –
FYI: Wir verwenden JFreechart für Echtzeit-Charts jeden Tag. –