Bonjour,

Bonjour, je suis en train d'implementer un graph grace à jFreeChart.
Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.XYItemEntity;
import org.jfree.chart.event.ChartProgressEvent;
import org.jfree.chart.event.ChartProgressListener;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.CandlestickRenderer;
import org.jfree.chart.renderer.xy.HighLowRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.time.Day;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.ohlc.OHLCSeries;
import org.jfree.data.time.ohlc.OHLCSeriesCollection;
import org.jfree.data.xy.OHLCDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;

/**
 * A demo for a pie chart using RadialGradientPaint in JFreeChart 1.0.14.
 */
public class PanChart  {

 private ChartPanel P;

    /**
     * Default constructor.
     *
     * @param title  the frame title.
     */
    public PanChart(){
        JFreeChart chart = createChart1(createDataset1());
        chart.setPadding(new RectangleInsets(1, 1, 1, 1)); 
        P = new ChartPanel(chart);
        P.setMouseWheelEnabled(true);
        P.setPreferredSize(new Dimension(600, 300));
    }

    public ChartPanel get_Panel()
    {
    return P;
    }
    
    
  /**
   * Creates a sample high low dataset.
   *
   * @return a sample high low dataset.
   */
  public OHLCDataset createDataset1() {

    OHLCSeries s1 = new OHLCSeries("Series 1");
    s1.add(new Day(24, 9, 2007), 50.5, 53.2, 49.8, 50.1);
    s1.add(new Day(25, 9, 2007), 50.2, 51.2, 47.8, 48.1);
    s1.add(new Day(26, 9, 2007), 48.0, 49.2, 45.3, 47.4);
    OHLCSeriesCollection dataset = new OHLCSeriesCollection();
    dataset.addSeries(s1);
    return dataset;
  }
  
    /**
   * Creates a sample high low dataset.
   *
   * @return a sample high low dataset.
   */
  public static OHLCDataset createDataset2() {

    OHLCSeries s2 = new OHLCSeries("Series 2");
    s2.add(new Day(24, 9, 2007), 5.5, 6.2, 4.8, 5.9);
    s2.add(new Day(25, 9, 2007), 6.0, 6.9, 6.0, 6.7);
    s2.add(new Day(26, 9, 2007), 6.8, 7.5, 6.4, 7.1);
    OHLCSeriesCollection dataset = new OHLCSeriesCollection();
    dataset.addSeries(s2);
    return dataset;
  }

   /**
   * Creates a sample chart.
   *
   * @param dataset  a dataset.
   *
   * @return a sample chart.
   */
  private JFreeChart createChart1(OHLCDataset dataset) {

    JFreeChart chart = ChartFactory.createHighLowChart(
            "OHLC Demo 3",
            "Time",
            "Price",
            dataset,
            true);
    XYPlot plot = (XYPlot) chart.getPlot();
    HighLowRenderer renderer = (HighLowRenderer) plot.getRenderer();
    renderer.setBaseStroke(new BasicStroke(20.0f));
    renderer.setSeriesPaint(0, Color.blue);

    DateAxis axis = (DateAxis) plot.getDomainAxis();
    axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);

    NumberAxis yAxis1 = (NumberAxis) plot.getRangeAxis();
    yAxis1.setAutoRangeIncludesZero(false);

    NumberAxis yAxis2 = new NumberAxis("Price 2");
    yAxis2.setAutoRangeIncludesZero(false);
    plot.setRangeAxis(1, yAxis2);
    plot.setDataset(1, createDataset2());
    CandlestickRenderer cr = new CandlestickRenderer(10.0);
    cr.setBaseStroke(new BasicStroke(10.0f));

    plot.setRenderer(1, cr);
    plot.getRenderer(1).setBaseStroke(new BasicStroke(10.0f));
    plot.mapDatasetToRangeAxis(1, 1);
    plot.setRangeCrosshairStroke(new BasicStroke(1));
    plot.setDomainCrosshairStroke(new BasicStroke(1));
    plot.setDomainCrosshairLockedOnData(true);
    plot.setRangeCrosshairLockedOnData(true);
    plot.setDomainCrosshairVisible(true);
    plot.setRangeCrosshairVisible(true);
    plot.setDomainPannable(true);
    
   //Mousse click event
                
        chart.addProgressListener(new ChartProgressListener() { 
        @Override 
        public void chartProgress(ChartProgressEvent cpe) { 
        if(cpe.getType()==ChartProgressEvent.DRAWING_FINISHED){ 
         System.out.println("Click event!"); 
         
        } 
        }
        
        });

    return chart;

  }

}
Aprés pour afficher le graph je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
PanChart demo = new PanChart();
jPanel2.setLayout(new GridLayout());
jPanel2.add(demo.get_Panel());
J'aimerai créer un évenment qui retourne la date en Y correspondant à la position de la souris lorsque je clique sur le graph.
J'ai pas mal chercher sur le net et j'ai reussi à trouver comment détecter le click (cf partie bleu du code) mais j'arrive toujours pas à obtenir la date correspondant à la position de la souris.
Est ce quelqu'un a une idée de comme faire ca ?

Merci d'avance.

Dereck