Hi Leute!
Ich hab schon gegoogled und auch den Quelltext von verschiedenen JFreeChart-Klassen durchgesehen, aber keine adäquate Lösung für mein Problem gefunden.
Ich habe ein Dataset, dessen Daten ständig aktualisiert werden. Dadurch wird auch das zugehörige Chart natürlich ständig bei jeder kleinen Änderung aktualisiert, was aber nicht sein muss und was unnötig Rechenleistung frisst.
Die Datasets bieteten ja nicht die Möglichkeit das "feuern" des Events zu stoppen, welches anzeigt, dass sich das Dataset geändert hat. Oder hab ich da was übersehen? Die fireDatasetChanged()-Methode wird bei jeder Änderung aufgerufen.
Dann bin ich auf den Plot gestoßen, der erlaubt das feuern zu deaktivieren mit setNotify(false). Damit würde ich dann verhindern, dass das Chart aktualisiert wird, weil es nicht von der Änderung erfährt. Sehe ich das richtig? Allerdings kann ich dann auch nicht mehr manuell feuern, da die fireChangeEvent()-Methode protected ist und ich von außen also nicht dran komme. Außerdem ist es auch unnötig, dass der Plot von jeder Änderung des Datasets erfährt.
Was ich will ist einfach, dass sich das Chart nicht bei jeder Änderung aktualisiert, sondern nur nach bestimmten Zeitabständen oder Ereignissen, die ich aber von außen selbst bestimme.
Bis jetzt habe ich es so gemacht, dass ich zunächst alle Daten in eine HashMap schreibe und diese ständig aktualisiert wird. Dann nach einer bestimmten Zeit bzw. bei bestimmten Ereignissen kopiere ich die HashTable in das DataSet und das Chart wird automatisch neu dargestellt mit den neuen Werten. Das klappt eigentlich sehr gut. Aber der Umweg über die HashMap ist ja eher unschön. Aber so funktioniert es eben. Das Chart wird nur dann aktualisiert, wenn ich es will.
Ist das auch ohne dieses Vorgehen möglich?
Edit: Ich bin auch auf die Idee gekommen eine eigene Dataset-Klasse zu schreiben, die meine Anforderungen erfüllt und bei der ich von außen die Events abfeuern kann. Allerdings brauche ich auch verschiedene Datasets. Also eins für ein PieChart, eins für ein BarChart etc. sodass das auch wieder mit hohem Aufwand verbunden ist für jedes Chart eine eigene Dataset-Klasse zu implementieren.
Vielen Dank für eure Hilfe!
Ich hab schon gegoogled und auch den Quelltext von verschiedenen JFreeChart-Klassen durchgesehen, aber keine adäquate Lösung für mein Problem gefunden.
Ich habe ein Dataset, dessen Daten ständig aktualisiert werden. Dadurch wird auch das zugehörige Chart natürlich ständig bei jeder kleinen Änderung aktualisiert, was aber nicht sein muss und was unnötig Rechenleistung frisst.
Die Datasets bieteten ja nicht die Möglichkeit das "feuern" des Events zu stoppen, welches anzeigt, dass sich das Dataset geändert hat. Oder hab ich da was übersehen? Die fireDatasetChanged()-Methode wird bei jeder Änderung aufgerufen.
Dann bin ich auf den Plot gestoßen, der erlaubt das feuern zu deaktivieren mit setNotify(false). Damit würde ich dann verhindern, dass das Chart aktualisiert wird, weil es nicht von der Änderung erfährt. Sehe ich das richtig? Allerdings kann ich dann auch nicht mehr manuell feuern, da die fireChangeEvent()-Methode protected ist und ich von außen also nicht dran komme. Außerdem ist es auch unnötig, dass der Plot von jeder Änderung des Datasets erfährt.
Was ich will ist einfach, dass sich das Chart nicht bei jeder Änderung aktualisiert, sondern nur nach bestimmten Zeitabständen oder Ereignissen, die ich aber von außen selbst bestimme.
Bis jetzt habe ich es so gemacht, dass ich zunächst alle Daten in eine HashMap schreibe und diese ständig aktualisiert wird. Dann nach einer bestimmten Zeit bzw. bei bestimmten Ereignissen kopiere ich die HashTable in das DataSet und das Chart wird automatisch neu dargestellt mit den neuen Werten. Das klappt eigentlich sehr gut. Aber der Umweg über die HashMap ist ja eher unschön. Aber so funktioniert es eben. Das Chart wird nur dann aktualisiert, wenn ich es will.
Ist das auch ohne dieses Vorgehen möglich?
Edit: Ich bin auch auf die Idee gekommen eine eigene Dataset-Klasse zu schreiben, die meine Anforderungen erfüllt und bei der ich von außen die Events abfeuern kann. Allerdings brauche ich auch verschiedene Datasets. Also eins für ein PieChart, eins für ein BarChart etc. sodass das auch wieder mit hohem Aufwand verbunden ist für jedes Chart eine eigene Dataset-Klasse zu implementieren.
Vielen Dank für eure Hilfe!
Zuletzt bearbeitet: