3 Stimmen

JFreeChart in Bildlaufleiste

Ich habe ein großes Diagramm mit jfreechart erstellt. Dieses Diagramm ist zu groß für den Bildschirm, also würde ich es gerne in ein Scrollfenster setzen. Wenn ich jedoch die Bildlaufleiste verwende, wird das gesamte Diagramm jedes Mal neu gezeichnet, was es extrem langsam macht. Gibt es eine Lösung für dieses Problem?

danke,

Bart

1voto

Kelly S. French Punkte 11857

Puffern Sie es selbst. Rendern Sie das JFreeChart in einem Panel, das sich nicht auf einem sichtbaren Panel befindet, und verwenden Sie dieses als Puffer für das Panel, das sich im Scrollfenster befindet. Dann können Sie die Repaint-Ereignisse und die Häufigkeit der Synchronisierung der beiden Panels steuern.

0voto

Jonathan Feinberg Punkte 43293

Ein Blick auf die Quelle zeigt, dass der ChartPanel-Konstruktor einen optionalen booleschen Parameter annimmt, der ihn anweist, beim Neuzeichnen einen Bildpuffer zu verwenden. Ich würde vermuten, dass das helfen würde.

public ChartPanel(JFreeChart chart, boolean useBuffer);

0voto

Adamski Punkte 52945

Mit JFreeChart wird immer das gesamte Diagramm neu gezeichnet, wenn ein Ereignis vom zugrunde liegenden Datensatz ausgelöst wird, unabhängig davon, ob das Diagramm in eine JScrollPane oder nicht.

Dies ist besonders auffällig, wenn Ihr Diagramm eine große Anzahl von Datenpunkten enthält und häufig aktualisiert wird. Es gibt einige "Tricks", mit denen Sie Ihre Benutzeroberfläche reaktionsschneller machen können, z. B.

  • Wenn Ihr zugrunde liegender Datensatz aktualisiert wird (z. B. SeriesDataset ) könnten Sie den Abschuss einer SeriesChangeEvent wenn das Diagramm gerade nicht angezeigt wird.
  • Auf ähnliche Weise könnten Sie mehrere Aktualisierungen drosseln, indem Sie nur periodisch SeriesChangeEvent alle N Sekunden statt bei jedem Ereignis, wobei der offensichtliche Nachteil darin besteht, dass Ihre Benutzeroberfläche weniger "echtzeitfähig" ist.

0voto

Oso Punkte 508

Ich denke, dass das Problem nicht durch das Panel selbst verursacht wird, sondern durch andere Ereignisse, die irgendwo anders ausgelöst werden. Ich verwende ChartPanel innerhalb von jscrollpanes ohne dieses Verhalten. Meine Anwendung funktioniert reibungslos.

Ich stimme mit Adamsky überein und rate Ihnen, das Problem nicht mehr in der Darstellung des Diagramms zu suchen, sondern in der Implementierung Ihres Datensatzes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X