2 votes

<jfree chart org.jfree.chart.plot.CategoryPlot ne peut être moulé en org.jfree.chart.plot.XYPlot>

Je suis en train d'utiliser Studio pour créer un rapport JasperReports. J'ai besoin d'augmenter la largeur du graphique en ligne (par défaut, il est trop mince). Autant que je sache, JasperReports utilise JFreeChart pour le graphique, et j'ai trouvé ce morceau de code sur Google pour personnaliser :

public class TSChartCustomizer extends JRAbstractChartCustomizer {
    public void customize(JFreeChart chart, JRChart jasperChart) {
       XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) chart.getXYPlot().getRenderer();
        BasicStroke stroke = new BasicStroke(3f);
        renderer.setSeriesStroke(1, stroke);
    }
}

J'ai construit et ajouté la classe ci-dessus dans un jar et l'ai ajoutée dans le projet jasper. Ensuite, dans les propriétés du graphique, je peux sélectionner la classe dans la classe du customiseur. Mais quand j'ai exécuté le rapport, j'ai obtenu cette erreur :

java.lang.ClassCastException: org.jfree.chart.plot.CategoryPlot cannot be cast to org.jfree.chart.plot.XYPlot

Je pense que le problème est probablement avec le code, mais je ne connais pas Jfreechart...

P.S ci-dessous se trouve le code du rapport, un très simple pour la démonstration :

1voto

dada67 Points 2348

Le personnaliseur de graphique ne fonctionne pas pour les graphiques de catégories, il était destiné à être utilisé pour les graphiques XY ou les séries chronologiques.

Pour les graphiques de catégories, vous aurez besoin de quelque chose comme ce qui suit (notez également que l'index de série est basé sur 0):

public class TSChartCustomizer extends JRAbstractChartCustomizer {
    public void customize(JFreeChart chart, JRChart jasperChart) {
        AbstractCategoryItemRenderer renderer = (AbstractCategoryItemRenderer) chart.getCategoryPlot().getRenderer();
        BasicStroke stroke = new BasicStroke(3f);
        renderer.setSeriesStroke(0, stroke);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X