Однажды мне пришлось показывать Гант схему 150 машин и 100.000 задач. Я написал собственный Java-апплет с пользовательским рендерингом, и передача данных обрабатывалась с помощью http + java serialization api. Я обнаружил, что любое другое решение (SVG, VML, Flash, теги изображений) было слишком медленным и трудным в работе.
Обновление: Here - изображение, как это выглядит. К сожалению для сообщества, это был промышленный проект, поэтому исходный код не является общедоступным. Я могу только поделиться некоторыми понятиями об этом.
Область диаграмм состоит из нескольких отдельных компонентов: горизонтальной и вертикальной полос прокрутки, площади диаграммы, метки времени и двух таблиц с каждой стороны. Эти компоненты связаны между собой посредством обработчиков событий. Если кто-то прокручивает/меняет, он влияет на остальных. Диаграмма Ганта состоит из заполненных прямоугольников, где цвет используется для указания статуса задачи. Отрисовка выполняется в методе paint() путем прокрутки каждой видимой строки и между отображаемыми датами начала начала. В рендеринге используется агрессивное обрезание вместо того, чтобы полагаться на функцию отсечения Graphics2D. Пользователи имеют возможность панорамирования и масштабирования вида.
Данные хранятся в сериализуемой структуре данных. Код Java на стороне сервера содержит кеш для всей структуры данных. Эта структура обновляется каждые 30 секунд, но только различия извлекаются из базы данных поддержки. Затем данные запрашиваются апплетом, составленным в модель gantt, сериализованным и возвращенным на клиентскую сторону. Обновление данных на стороне клиента/апплета не является автоматическим: пользователям нужно нажать кнопку обновления - это позволяет им оценивать изображение без неожиданных изменений.
Оказание диаграммы Гантта не требует, чтобы многие фантазии - fillRect, AlphaComposite, drawLine. Если вам нужны более сложные изображения, вам нужно будет сделать больше кода с моим подходом.
JFreeChart не может быть лучшим выбором для данных в реальном времени, как FAQ утверждает, что она действительно не поддерживает в режиме реального времени графиков. – Mark
Да, около реального времени является ключевым требованием. – 2009-06-20 15:29:45
FYI: мы используем JFreechart для отображения в реальном времени каждый день. –