2009-11-13 63 views
3

我正在用jfreechart創建一個大圖。這個圖表對於屏幕來說太大了,所以我想把它放在一個滾動窗格中。但是,使用滾動條時,每次都會重新繪製完整的圖形,這使得它非常緩慢。有沒有解決方案?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圖表。
  • 同樣,您可以通過每N秒週期性地觸發SeriesChangeEvent而不是每個事件來節制多個更新,但明顯的缺點是您的UI不太「實時」。
1

自己緩衝。在不在可見面板上的面板中渲染JFreeChart,並將其用作滾動面板中面板的緩衝區。然後,您可以控制重繪事件以及您同步兩個面板的頻率。

0

我其實認爲這個問題不是因爲面板本身,而是因爲其他事件觸發了其他事件。我確實在jscrollpanes內部使用ChartPanel而沒有這種行爲。我的申請工作順利。

同意Adamsky,我的建議是停止查看圖表渲染中的問題,但在數據集實施中。

+0

這不是我的數據集的問題。創建後數據集不會再被更改。我必須說我有一個巨大的圖形,這是一個StackedBarChart,有成千上萬的數據項... 在較小的圖上,我沒有這個問題... – Fortega

+1

不是試圖解決你的問題,而是給出選項.. 。將它轉換成圖像然後顯示它會有道理嗎? – Oso