jfreechartで作成した大きなグラフがあります。このグラフは画面には大きすぎるので、スクロールペインに入れたいと思います。ただし、スクロールバーを使用すると、グラフ全体が毎回再描画されるため、非常に遅くなります。これに対する解決策はありますか?
ありがとう、
バート
jfreechartで作成した大きなグラフがあります。このグラフは画面には大きすぎるので、スクロールペインに入れたいと思います。ただし、スクロールバーを使用すると、グラフ全体が毎回再描画されるため、非常に遅くなります。これに対する解決策はありますか?
ありがとう、
バート
自分でバッファリングします。表示されているパネルにないパネルで JFreeChart をレンダリングし、それをスクロール区画にあるパネルへのバッファーとして使用します。次に、再描画イベントと、2 つのパネルを同期する頻度を制御できます。
JFreeChart を使用すると、チャートが に埋め込まれているかどうかに関係なく、基になるデータセットからイベントが発生すると、完全なチャートが常に再描画されますJScrollPane
。
これは、グラフに多数のデータポイントが含まれ、頻繁に更新される場合に特に顕著です。UI をより応答性の高いものにするために試行できる「コツ」がいくつかあります。例えば
SeriesDataset
起動が遅れる可能性があります。SeriesChangeEvent
SeriesChangeEvent
。明らかな欠点は、UI が「リアルタイム」ではないことです。実際、問題はパネル自体が原因ではなく、他の場所で発生した他のイベントが原因だと思います。私は実際にその動作なしでjscrollpanes内でChartPanelを使用しています。私のアプリケーションはスムーズに動作します。
Adamsky に同意します。私のアドバイスは、グラフのレンダリングで問題を探すのをやめ、データセットの実装で問題を探すことです。
ソースを見ると、 ChartPanelコンストラクターがオプションのブール値パラメーターを受け取り、再描画時に画像バッファーを使用するように指示していることがわかります。それが役立つと思います。
public ChartPanel(JFreeChart chart, boolean useBuffer);