Jump to content

Problem in using Scriptlet


dev_1312

Recommended Posts

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

  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

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 Class

public 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 Class

public 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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...