Search code examples
jfreechart

JFreeChart How to get date value for CandlestickChart using OHLCSeries


I generate a JFreeChart CandlestickChart , using OHLCSeries . And I extend CandlestickRenderer. In CandlestickRenderer, I overwrite "public Paint getItemPaint(int series, int item)" , in it I need the every stoke's date info to do something, but I don't know to get it , please help me to solve it.

Part of Codes as following:

       OHLCSeries ohlcSeries = new OHLCSeries("Price");
       for(Records record : recordslist ) {
           double h =...;
           ....
           LocalDate actionday = record.getRecordsDay ();
           int year = actionday.getYear();
           int month = actionday.getMonthValue();
           int day = actionday.getDayOfMonth();
           ohlcSeries.add(new Day(day,month,year), open, high, low, close);
       }
       OHLCSeriesCollection candlestickDataset.addSeries(ohlcSeries);
       JFreeChart candlestickChart = ChartFactory.createCandlestickChart("", "","", candlestickDataset, true);

       DateAxis  dayAxis = new DateAxis (); 
       candlestickChart.getXYPlot().setDomainAxis(dayAxis);

       class AnalysisCandlestickRenderer extends CandlestickRenderer {
            public Paint getItemPaint(int series, int item) {
                //here I need every stoke's date info , how can I get it?
            }
       }

Solution

  • As suggested in this related example, you can access the required field in your dataset, an OHLCSeriesCollection, using the series and item values passed to your implementation of getItemPaint() in your custom CandlestickRenderer. Starting form this complete example, the following renderer produces the data values shown.

    Code:

    private final OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection();
    …
    class AnalysisCandlestickRenderer extends CandlestickRenderer {
    
        @Override
        public Paint getItemPaint(int series, int item) {
            OHLCSeries currentSeries = seriesCollection.getSeries(series);
            System.out.println(series + ": " + currentSeries.getPeriod(item));
            return super.getItemPaint(item, item);
        }
    }
    …
    CandlestickRenderer r = new AnalysisCandlestickRenderer();
    chart.getXYPlot().setRenderer(r);
    

    Console:

    1: Wed Jan 01 12:00:00 EST 2014
    1: Wed Jan 01 12:01:00 EST 2014
    1: Wed Jan 01 12:02:00 EST 2014
    1: Wed Jan 01 12:03:00 EST 2014
    1: Wed Jan 01 12:04:00 EST 2014
    0: Wed Jan 01 12:00:00 EST 2014
    0: Wed Jan 01 12:01:00 EST 2014
    0: Wed Jan 01 12:02:00 EST 2014
    0: Wed Jan 01 12:03:00 EST 2014
    0: Wed Jan 01 12:04:00 EST 2014
    0: Wed Jan 01 12:05:00 EST 2014
    0: Wed Jan 01 12:06:00 EST 2014
    0: Wed Jan 01 12:07:00 EST 2014
    0: Wed Jan 01 12:08:00 EST 2014
    0: Wed Jan 01 12:09:00 EST 2014
    

    Chart:

    image