Hallo, ich hab eine ernsthaftes Problem mit JFreeCharts :-/
Habe bereits auch in das JFreeCharts Forum gepostet, allerdings konnte mir auch letztes mal hier sehr schnell geholfen werden da jemand das gleiche Problem hatte, daher hier mein Problem:
Ich habe ein Chart welches für jedes Frame aktualisiert werden sollte. Allerdings passiert zur Laufzeit gar nix mit dem Chart, erst wenn es durchgelaufen ist, wird das Chart angezeigt. Das ist aber nicht so toll. Es sollte halt kontinuierlich geändert werden, während auch sich die Frames bei dem 3D Männchen ändern. Siehe Screenshots.
Hab bereits im JFreeChart gelesen:
"5. Does JFreeChart support real-time charting?
Not really. JFreeChart includes an event-notification mechanism that ensures that charts are updated whenever the dataset is updated. However, the chart is completely repainted for each update, which limits the "frames per second" rate that you can achieve with JFreeChart. Typically, updating once per second is fine, but updating multiple times per second results in high CPU load. If you want to pursue this, do some performance testing with your specific configuration and use cases. "
Und ich würde den Performanceverlust in kauf nehmen und versuchen durch performanteren Code ersetzen (da geht noch einiges)
allerding bin ich der Meinung dass es auch schon so klappen müsste, auch wenn, von mir aus, sehr langsam. Hauptsache es läuft.
Mein Proggy vergleicht halt den aktuellen Bewegunsablauf des 3DMännchens mit anderen schon geladenen Bewegungsabläufen und dies sollte dann im Chart verdeutlicht werden.
Screenshots:
kostenlos bilder hochladen - bilduploadr.de
kostenlos bilder hochladen - bilduploadr.de
Das ist im Prinzip der Code:
Das output.repaint(); und cp1.repaint(); lösen leider nicht mein Problem und ich verstehe einfach nicht warum nix während des Durchlaufens der Animation geändert wird, sondern erst am Ende, obwohl der Aufruf mitten in der Schleife steht. :-/
Hat jemand irgendeine Idee oder ein ähnliches Problem schonmal gehabt. Vielleicht muss ich ein Delay oder sowas einbauen.
Danke für jede Antwort
Grüße
Habe bereits auch in das JFreeCharts Forum gepostet, allerdings konnte mir auch letztes mal hier sehr schnell geholfen werden da jemand das gleiche Problem hatte, daher hier mein Problem:
Ich habe ein Chart welches für jedes Frame aktualisiert werden sollte. Allerdings passiert zur Laufzeit gar nix mit dem Chart, erst wenn es durchgelaufen ist, wird das Chart angezeigt. Das ist aber nicht so toll. Es sollte halt kontinuierlich geändert werden, während auch sich die Frames bei dem 3D Männchen ändern. Siehe Screenshots.
Hab bereits im JFreeChart gelesen:
"5. Does JFreeChart support real-time charting?
Not really. JFreeChart includes an event-notification mechanism that ensures that charts are updated whenever the dataset is updated. However, the chart is completely repainted for each update, which limits the "frames per second" rate that you can achieve with JFreeChart. Typically, updating once per second is fine, but updating multiple times per second results in high CPU load. If you want to pursue this, do some performance testing with your specific configuration and use cases. "
Und ich würde den Performanceverlust in kauf nehmen und versuchen durch performanteren Code ersetzen (da geht noch einiges)
allerding bin ich der Meinung dass es auch schon so klappen müsste, auch wenn, von mir aus, sehr langsam. Hauptsache es läuft.
Mein Proggy vergleicht halt den aktuellen Bewegunsablauf des 3DMännchens mit anderen schon geladenen Bewegungsabläufen und dies sollte dann im Chart verdeutlicht werden.
Screenshots:
kostenlos bilder hochladen - bilduploadr.de
kostenlos bilder hochladen - bilduploadr.de
Das ist im Prinzip der Code:
Java:
while (iterating over the frames till the end){
doSomeCoolStuff();
create3DHorLineChart(TreeMap<String, Double> tmSD, JTabbedPane output); // here is the original code of the
}
private void create3DHorLineChart(TreeMap<String, Double> tmSD, JTabbedPane output) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
Map map1 = sortByValue(tmSD);
for (String key : ((Map<String, Double>) map1).keySet()) {
String[] NameAndMatch = key.split("###");
dataset.addValue(tmSD.get(key) * 100, NameAndMatch[0], NameAndMatch[1]);
}
final JFreeChart chart = ChartFactory.createBarChart3D(
"Matching probability of " + labAmc.getText().split("\\\\")[labAmc.getText().split("\\\\").length-1], // chart titel
null, // yachse
"Percent", // xachse
dataset, // daten
PlotOrientation.HORIZONTAL, // orientation
true, // legende
true, // tooltips
false // urls
);
final CategoryPlot plot = chart.getCategoryPlot();
plot.setForegroundAlpha(1.0f);
// linksbüdig die labels
final CategoryAxis axis = plot.getDomainAxis();
final CategoryLabelPositions p = axis.getCategoryLabelPositions();
final CategoryLabelPosition left = new CategoryLabelPosition(
RectangleAnchor.LEFT, TextBlockAnchor.CENTER_LEFT,
TextAnchor.CENTER_LEFT, 0.0,
CategoryLabelWidthType.RANGE, 0.30f);
axis.setCategoryLabelPositions(CategoryLabelPositions.replaceLeftPosition(p, left));
// mache chart sichtbar
ChartPanel cp1 = new ChartPanel(chart);
if (output.getTabCount() > 0) {
output.remove(0);
}
output.add(cp1);
output.setTitleAt(0, "Matching");
output.setSelectedIndex(0);
output.repaint();
cp1.repaint();
}
Hat jemand irgendeine Idee oder ein ähnliches Problem schonmal gehabt. Vielleicht muss ich ein Delay oder sowas einbauen.
Danke für jede Antwort
Grüße
Zuletzt bearbeitet: