ClassCastException при попытке расширения XYLineAndShapeRenderer (JFreeChart)

Я пытаюсь переопределить метод getItemPaint() XYLineAndShapeRenderer, создав подкласс:

private class MultiRenderer extends XYLineAndShapeRenderer{
        @Override
        public Paint getItemPaint(int row, int column) {
            if(row==2){
                float x = getAmplitude()[column];
                return floatToColor(x);
            }
            return super.getItemPaint(row, column);
        }
        private Color floatToColor(float val){...}
}

И вызов:

XYPlot xyPlot = (XYPlot) myJFreeChartObject.getPlot();
MultiRenderer r = (MultiRenderer) xyPlot.getRenderer();

Но я получаю ClassCastException. Можно ли как-нибудь правильно применить это или переопределить getItemPaint без создания подкласса? Я пытаюсь построить 2 серии в виде обычных линейных графиков и 3-ю серию без линии и разных цветовых точек. Первые 2 ряда должны иметь линию, но без точечных маркеров.

Примечание getAmplitude() просто возвращает массив чисел с плавающей точкой от 0 до 1


person Eduardo    schedule 22.10.2013    source источник
comment
В вашем примере я не вижу xyPlot .setRenderer(new MultiRenderer()); можете ли вы предоставить SSCCE   -  person GrahamA    schedule 23.10.2013


Ответы (1)


Вы можете использовать анонимный внутренний класс

plot.setRenderer(new XYLineAndShapeRenderer() {          

  @Override
  public Paint getItemPaint(int row, int column) {
    if(row==2){
      float x = getAmplitude()[column];
      return floatToColor(x);
    }
    return super.getItemPaint(row, column);
 }

private Color floatToColor(float val){...}

});

Или используйте DrawingSupplier для вашего plot

person GrahamA    schedule 24.10.2013