dev_1312 Posted May 25, 2011 Share Posted May 25, 2011 Hi All,I am new to scriptlet functionality. I wrote a code in java and trying to use scriptlet but need some help. Here is my req - In the barchart I have values for represnting the profit and loss for particular months. I want to display the positive bars as green and negative bars as red. I wrote a code for changing the bar renderer but dont know what is the standard way to call this code in ireport. Any help would be highly appreciated.~Dev Link to comment Share on other sites More sharing options...
svenn Posted May 25, 2011 Share Posted May 25, 2011 I did this with a chart customizer. You need to extend the bar renderer class. Then you need to set the renderer of your bar chart to the custom renderer.Chart Customizer Classpublic class <My>ChartCustomizer extends JRAbstractChartCustomizer { public void customize(JFreeChart chart, JRChart jasperChart) { //Chart is a bar chart if(jasperChart.getChartType() == JRChart.CHART_TYPE_BAR) { <My>BarRenderer renderer = new <My>BarRenderer(); chart.getCategoryPlot().setRenderer(renderer);}Renderer Classpublic class <My>BarRenderer extends BarRenderer { public <My>BarRenderer() { super(); } public Paint getItemPaint(int row, int col) { CategoryDataset cd = getPlot().getDataset(); if(cd != null) { Integer l_rowKey = (Integer)cd.getRowKey(row); String l_colKey = (String)cd.getColumnKey(col); double l_value = cd.getValue(l_rowKey, l_colKey).doubleValue(); <Conditional logic to choose your color> return <Your Color>; } return <Some default color>; }} Link to comment Share on other sites More sharing options...
dev_1312 Posted May 29, 2011 Author Share Posted May 29, 2011 Hi,Thanks Sevenn,I tried your code and created the jar file .After this I added the jar files in the class path and given the name of the customizer class as colorLimiter.ChartCustomizer in the customizer class option in the properties of the bar chart. I am able to compile the jrxml file but at run time I am getting the below mentioned error : Please help me out with this as it is really critical Error filling print... Could not create chart customizer instance. Setting up the file resolver... net.sf.jasperreports.engine.JRRuntimeException:Could not create chart customizer instance. at net.sf.jasperreports.engine.fill.JRFillChart.<init>(JRFillChart.java:298) at net.sf.jasperreports.engine.fill.JRFillObjectFactory.visitChart(JRFillObjectFactory.java:746) at net.sf.jasperreports.engine.base.JRBaseChart.visit(JRBaseChart.java:727) at net.sf.jasperreports.engine.JRAbstractObjectFactory.getVisitResult(JRAbstractObjectFactory.java:88) at net.sf.jasperreports.engine.fill.JRFillElementGroup.<init>(JRFillElementGroup.java:82) at net.sf.jasperreports.engine.fill.JRFillElementContainer.<init>(JRFillElementContainer.java:89) at net.sf.jasperreports.engine.fill.JRFillBand.<init>(JRFillBand.java:89) at net.sf.jasperreports.engine.fill.JRFillObjectFactory.getBand(JRFillObjectFactory.java:549) at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:556) at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:77) at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:87) at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57) at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:52) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:877) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: java.lang.IllegalAccessException: Class net.sf.jasperreports.engine.fill.JRFillChart can not access a member of class colorLimiter.ChartCustomizer1 with modifiers "" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)at java.lang.Class.newInstance0(Class.java:349) at java.lang.Class.newInstance(Class.java:308) at net.sf.jasperreports.engine.fill.JRFillChart.<init>(JRFillChart.java:296) ... 18 more Print not filled. Try to use an EmptyDataSource... Code:package colorLimiter;import java.awt.Color;import java.awt.Paint;import net.sf.jasperreports.engine.JRAbstractChartCustomizer;import net.sf.jasperreports.engine.JRChart;import org.jfree.chart.JFreeChart;import org.jfree.chart.renderer.BarRenderer;import org.jfree.data.CategoryDataset;class ChartCustomizer extends JRAbstractChartCustomizer { public void customize(JFreeChart chart, JRChart jasperChart) { //Chart is a bar chart if(jasperChart.getChartType() == JRChart.CHART_TYPE_BAR) { ColorBarRenderer renderer = new ColorBarRenderer(); chart.getCategoryPlot().setRenderer(renderer);}} } //Renderer Class class ColorBarRenderer extends BarRenderer { /** * */ private static final long serialVersionUID = 1L; public ColorBarRenderer() { super(); } public Paint getItemPaint(int row, int col) { System.out.println("in paint"); CategoryDataset cd = getPlot().getDataset(); System.out.println("after cd"); if(cd != null) { Integer l_rowKey = (Integer)cd.getRowKey(row); String l_colKey = (String)cd.getColumnKey(col); double l_value = cd.getValue(l_rowKey, l_colKey).doubleValue(); if (l_value < 0.0) { return Color.red; } else { return Color.green; } } return Color.blue; } } Link to comment Share on other sites More sharing options...
dev_1312 Posted May 31, 2011 Author Share Posted May 31, 2011 Hi All,Can anyone help me out . Now I am facing another error. Please find below : Code:Error filling print... java.lang.NoSuchMethodError: org.jfree.chart.plot.CategoryPlot.setRenderer(Lorg/jfree/chart/renderer/CategoryItemRenderer;)V null Setting up the file resolver... in chart customizer java.lang.NoSuchMethodError: org.jfree.chart.plot.CategoryPlot.setRenderer(Lorg/jfree/chart/renderer/CategoryItemRenderer;)V     at colorLimiter.ChartCustomizer.customize(ChartCustomizer.java:17)     at net.sf.jasperreports.engine.fill.JRFillChart.evaluateChart(JRFillChart.java:1345)     at net.sf.jasperreports.engine.fill.JRFillChart.evaluateRenderer(JRFillChart.java:1305)     at net.sf.jasperreports.engine.fill.JRFillChart.evaluate(JRFillChart.java:1294)     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258)     at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNoLastFooterSamePage(JRVerticalFiller.java:1072)     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1037)     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:301)     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:135)     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)     at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)     at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)     at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)     at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:877)     at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)     at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Print not filled. Try to use an EmptyDataSource... Link to comment Share on other sites More sharing options...
dev_1312 Posted May 31, 2011 Author Share Posted May 31, 2011 Please find below the code : Code:package colorLimiter;import net.sf.jasperreports.engine.JRAbstractChartCustomizer;import net.sf.jasperreports.engine.JRChart;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.CategoryPlot;public class ChartCustomizer extends JRAbstractChartCustomizer { public void customize(JFreeChart chart, JRChart jasperChart) { System.out.println("in chart customizer"); //Chart is a bar chart if(jasperChart.getChartType() == JRChart.CHART_TYPE_BAR) { ColorBarRenderer renderer = new ColorBarRenderer(); ((CategoryPlot)chart.getCategoryPlot()).setRenderer(renderer); }} } //Renderer Class package colorLimiter;import java.awt.Color;import java.awt.Paint;import org.jfree.chart.renderer.BarRenderer;import org.jfree.data.CategoryDataset;public class ColorBarRenderer extends BarRenderer { /** * */ private static final long serialVersionUID = 1L; public ColorBarRenderer() { super(); } public Paint getItemPaint(int row, int col) { System.out.println("in paint"); CategoryDataset cd = getPlot().getDataset(); System.out.println("after cd"); if(cd != null) { Integer l_rowKey = (Integer)cd.getRowKey(row); String l_colKey = (String)cd.getColumnKey(col); double l_value = cd.getValue(l_rowKey, l_colKey).doubleValue(); if (l_value < 0.0) { return Color.red; } else { return Color.green; } } return Color.blue; } } Link to comment Share on other sites More sharing options...
dev_1312 Posted June 5, 2011 Author Share Posted June 5, 2011 Hi All,Is there anyone who can help me out with this ? Any experts , Moderator ?Please help me out with this , I already spent a week but no gain .Thanks in advance¬Dev Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now