3

jfreechartで作成した大きなグラフがあります。このグラフは画面には大きすぎるので、スクロールペインに入れたいと思います。ただし、スクロールバーを使用すると、グラフ全体が毎回再描画されるため、非常に遅くなります。これに対する解決策はありますか?

ありがとう、

バート

4

4 に答える 4

1

自分でバッファリングします。表示されているパネルにないパネルで JFreeChart をレンダリングし、それをスクロール区画にあるパネルへのバッファーとして使用します。次に、再描画イベントと、2 つのパネルを同期する頻度を制御できます。

于 2009-11-13T15:14:07.263 に答える
0

JFreeChart を使用すると、チャートが に埋め込まれているかどうかに関係なく、基になるデータセットからイベントが発生すると、完全なチャートが常に再描画されますJScrollPane

これは、グラフに多数のデータポイントが含まれ、頻繁に更新される場合に特に顕著です。UI をより応答性の高いものにするために試行できる「コツ」がいくつかあります。例えば

  • 基礎となるデータセットが更新された場合 (例: ) 、チャートが現在表示されていない場合、 のSeriesDataset起動が遅れる可能性があります。SeriesChangeEvent
  • 同様に、すべてのイベントではなく、N 秒ごとに定期的に起動するだけで、複数の更新を抑制することができますSeriesChangeEvent。明らかな欠点は、UI が「リアルタイム」ではないことです。
于 2009-11-13T14:54:12.040 に答える
0

実際、問題はパネル自体が原因ではなく、他の場所で発生した他のイベントが原因だと思います。私は実際にその動作なしでjscrollpanes内でChartPanelを使用しています。私のアプリケーションはスムーズに動作します。

Adamsky に同意します。私のアドバイスは、グラフのレンダリングで問題を探すのをやめ、データセットの実装で問題を探すことです。

于 2009-11-13T15:25:22.903 に答える
0

ソースを見ると、 ChartPanelコンストラクターがオプションのブール値パラメーターを受け取り、再描画時に画像バッファーを使用するように指示していることがわかります。それが役立つと思います。

public ChartPanel(JFreeChart chart, boolean useBuffer);
于 2009-11-13T14:25:58.587 に答える