2009-11-13 4 views
3

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

спасибо,

Барта

ответ

0

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

public ChartPanel(JFreeChart chart, boolean useBuffer); 
+0

Нет, не работает. Конструктор, который принимает только один параметр, уже устанавливает «useBuffer» в true. – Fortega

+0

public static final boolean DEFAULT_BUFFER_USED = true; – Fortega

0

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

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

  • Если базовый набор данных обновляется (например, SeriesDataset) вы могли бы задержать запуская SeriesChangeEvent, если не отображается в данный момент на графике.
  • Аналогичным образом вы могли бы активировать несколько обновлений, только периодически запуская SeriesChangeEvent каждые N секунд, а не на каждое событие, очевидным недостатком является то, что ваш пользовательский интерфейс меньше «в режиме реального времени».
1

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

0

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

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

+0

Это не проблема с моим набором данных. После создания набор данных больше не изменяется. Я должен сказать, что у меня огромный граф, который является StackedBarChart, с тысячами элементов данных ... На меньших графиках у меня нет этой проблемы ... – Fortega

+1

не пытается решить вашу проблему, но дает варианты .. . Имеет ли смысл преобразовать его в изображение, а затем отобразить его? – Oso

Смежные вопросы