JFreeChart в области прокрутки - PullRequest
3 голосов
/ 13 ноября 2009

У меня большой график, созданный с помощью jfreechart. Эта диаграмма слишком велика для экрана, поэтому я хотел бы поместить ее в область прокрутки. Однако при использовании полосы прокрутки полный график каждый раз перерисовывается, что делает его чрезвычайно медленным. Есть ли решение для этого?

спасибо,

Bart

Ответы [ 4 ]

1 голос
/ 13 ноября 2009

Буфер это сам. Визуализируйте JFreeChart на панели, которой нет на видимой панели, и используйте ее в качестве буфера для панели, находящейся в области прокрутки. Затем вы можете контролировать события перерисовки и частоту синхронизации двух панелей.

0 голосов
/ 13 ноября 2009

Я на самом деле думаю, что проблема не в самой панели, а в каких-то других событиях, запущенных где-то еще. Я действительно использую ChartPanel внутри jscrollpanes без такого поведения. Мое приложение работает плавно.

Соглашаясь с Адамским, я советую перестать смотреть на проблему при рендеринге диаграммы, но при реализации набора данных.

0 голосов
/ 13 ноября 2009

С JFreeChart вся диаграмма всегда будет перерисовываться, когда событие запускается из базового набора данных, независимо от того, встроена ли диаграмма в JScrollPane или нет.

Это особенно заметно, если ваша диаграмма содержит большое количество точек данных и часто обновляется. Есть некоторые «клуджи», которые вы можете попытаться сделать своим интерфейсом более отзывчивым; например,

  • Если ваш базовый набор данных обновлен (например, SeriesDataset), вы можете отложить запуск SeriesChangeEvent, если график в данный момент не отображается.
  • Точно так же вы можете ограничить несколько обновлений, только периодически запуская SeriesChangeEvent каждые N секунд, а не на каждое событие, очевидным недостатком является то, что ваш пользовательский интерфейс менее "в реальном времени".
0 голосов
/ 13 ноября 2009

Взглянув на источник показывает, что конструктор ChartPanel принимает необязательный логический параметр, который указывает ему использовать буфер изображений при перерисовке. Я думаю, это поможет.

public ChartPanel(JFreeChart chart, boolean useBuffer);
...