10
votes

Jfreechart - Actualiser un graphique en fonction de la modification des données

J'aimerais savoir comment rafraîchir un graphique si nous voulons changer de données "en direct". Je veux dire par exemple, j'ai un graphique avec une tâche qui apparaît sur 3 ans et j'aimerais changer de 3 ans de 5 ans. Je veux que le tableau passe immédiatement.

Y a-t-il une sorte de carte de mise à jour ou quelque chose comme ça?

Je sais que vous pourriez dire "Obtenez vos tâches de tâches, faites vos modifications et il sera automatiquement rafraîchi" mais mes tâches sont générées et je ne peux pas facilement les modifier facilement. C'est pourquoi j'aimerais trouver un moyen de recalculer et de reconstruire tout le tableau.


0 commentaires

6 Réponses :


0
votes

Je n'ai pas trouvé de moyen simple de mettre à jour un Jfreechart "Live", car la structure de données de Jfreechart est très incompatible avec ma structure de données. Donc, je construis un redessinement () - méthode de mienne, qui recueille les données de mon Datamodel, construisez un DataModel JFREECHART et définissez le graphique neuf.

Cela donne le sentiment d'une mise à jour "en direct", elle est aussi très laide.


1 commentaires

J'ai trouvé l'approche de Jfreechart très compatible avec Swing's Architecture de modèle séparable .



7
votes

the ajouter () méthode de Les tâchesseries envoie automatiquement un SeriesChangeVente à tous les auditeurs enregistrés, par exemple CatégoriePlot . Dans ce exemple , dynamictimesCollection Implements < Code> SeriesChangeVente . Dans ce cas, la carte xyplot est un auditeur enregistré.


2 commentaires

Est xyplot inscrit en tant qu'amitTer qui écoute sur SeriesChangeVantage Par défaut lorsque le jfreechart est créé par charkfactory (c'est-à-dire Dire, je n'ai pas besoin d'enregistrer un par moi-même)? Votre réponse m'a aidé deux fois dans deux jours. Merci!


Indirectement: abstractSeriesDataset Forwards Les modifications de la série sur la parcelle, qui (automatiquement) écoute (automatiquement) pour DataSet changements.



4
votes

J'ai eu cette question; Je l'ai fait en utilisant ceci:

private void refreshChart() {
    jPanel_GraphicsTop.removeAll();
    jPanel_GraphicsTop.revalidate(); // This removes the old chart 
    aChart = createChart(); 
    aChart.removeLegend(); 
    ChartPanel chartPanel = new ChartPanel(aChart); 
    jPanel_GraphicsTop.setLayout(new BorderLayout()); 
    jPanel_GraphicsTop.add(chartPanel); 
    jPanel_GraphicsTop.repaint(); // This method makes the new chart appear
}


1 commentaires

vous avez des erreurs, mais une bonne solution 1.-Rafroflut (2.-Achart Initialisation



5
votes

J'ai aussi eu ce problème avec un xyplot. J'ai trouvé une solution de contournement en réinitialisant le jeu de données: xxx

c'est fou mais ça marche ...

Remarque: graph.setnotify (true) semble ne rien faire.


0 commentaires

1
votes
// create a chart
ChartFrame mychartframe = new ChartFrame("my charts", chart);

// some other stuff ...

// somewhere else in a code far far away
mychartframe.getChartPanel().getChart().fireChartChanged();

0 commentaires

0
votes

Qu'est-ce qui a fonctionné avec moi était le suivant: xxx


0 commentaires