Graphique dynamique avec JFreeChart
Bonjour,
j'affiche un graphique de point grâce à XYPlot de JFreeChart.
J'arrive à récupérer les coordonnées des point où l'utilisateur clique.
J'aimerai pouvoir afficher ces points au fur et à mesure.
Mon graphique est dans un ChartPanel.
J'ai essayé de faire chartPanel.repaint(); mais ça ne fonctionne pas.
Je mets ma fonction d'affichage du graphique pour mieux comprendre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
private JFreeChart chartGeo;
private XYPlot plot2;
private XYPlot plot3;
public JFreeChart affichageGraphe(int nombrePoints, String[] bufferLecture){
// Créer et afficher graphique XY
XYSeries seriesGeo = new XYSeries("Serie1");
XYSeries seriesGeo2 = new XYSeries("Serie2");
XYSeries seriesPtsCliques = new XYSeries("Serie3");
for (int i=13 ; i<nombrePoints ; i+=19)
{
double valeur1 = Double.parseDouble(bufferLecture[i]);
double valeur2 = Double.parseDouble(bufferLecture[i+1]);
seriesGeo.add(valeur1, valeur2);
}
for (int i=13 ; i<nombrePointsClique*2 ; i+=19)
{
seriesGeo.add(bufferClique[i], bufferClique[i+1]);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XYDataset xyDatasetGeo = new XYSeriesCollection(seriesGeo);
XYDataset xyDatasetGeo2 = new XYSeriesCollection(seriesGeo2);
XYDataset xyDatasetPointsCliques = new XYSeriesCollection(seriesPtsCliques);
chartGeo = ChartFactory.createScatterPlot("", "", "", xyDatasetGeo, PlotOrientation.VERTICAL, false, true, false);
//3. Mise en place du nouvelle axe dans le diagramme.
plot2 = (XYPlot) chartGeo.getPlot();
plot2.setDataset(2, (XYDataset) xyDatasetGeo2);
//4.Rendu du tracé
XYItemRenderer rendu2= new XYLineAndShapeRenderer(false,true);
rendu2.setSeriesPaint(2, Color.green);
plot2.setRenderer(2,rendu2);
//3. Mise en place du nouvelle axe dans le diagramme.
plot3 = (XYPlot) chartGeo.getPlot();
plot3.setDataset(3, (XYDataset) xyDatasetPointsCliques);
//4.Rendu du tracé
XYItemRenderer rendu3= new XYLineAndShapeRenderer(false,true);
rendu3.setSeriesPaint(3, Color.green);
plot3.setRenderer(2,rendu3);
return chartGeo;
} |
Ainsi que la fonction écoutant les clique sur le ChartPanel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public void chartMouseClicked(ChartMouseEvent action) {
ValueAxis xAxis = plot2.getDomainAxis();
ValueAxis yAxis = plot2.getRangeAxis();
double mouseX = xAxis.java2DToValue(action.getTrigger().getX(), chartPanel.getScreenDataArea(), plot2.getDomainAxisEdge());
double mouseY = yAxis.java2DToValue(action.getTrigger().getY(), chartPanel.getScreenDataArea(), plot2.getRangeAxisEdge());
System.out.println("mouseX : " + mouseX);
System.out.println("mouseY : " + mouseY);
bufferArpentage[emplacementCurseur ] = mouseX;
bufferArpentage[emplacementCurseur +1] = mouseY;
emplacementCurseur += 2;
nombrePointsClique++;
chartGeo = affichageGraphe(nombreLignes, contenuFichier);
this.repaint();
chartPanel.repaint();
} |
Savez-vous comment faire ?
Merci.
Bonne journée.