【问题标题】:Add customizer class to remove the space between bars in Bar chart添加定制器类以删除条形图中条形之间的空间
【发布时间】:2014-10-30 01:08:42
【问题描述】:

我正在尝试添加定制器类以删除条形图中条形之间的空间,但在将 customizer class 属性添加到 package barchartcustomizer 后,我在 iReport 中遇到了一些错误.我还在 iReport 的类路径中添加了 barchartcustomizer.jar。

我的代码:-

package barchartcustomizer;

import net.sf.jasperreports.engine.JRAbstractChartCustomizer;
import net.sf.jasperreports.engine.JRChart;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;


public class BarChartCustomizer extends JRAbstractChartCustomizer {

public void customize(JFreeChart chart, JRChart jasperChart) {

CategoryPlot categoryPlot = chart.getCategoryPlot();
BarRenderer renderer = (BarRenderer) categoryPlot.getRenderer();

//Spaces between bars
renderer.setItemMargin(0.03);       
}
}

但是当我点击预览时出现这个错误:-

错误填充打印...无法创建图表定制器实例。 设置文件解析器...添加文件解析器... net.sf.jasperreports.engine.JRRuntimeException:无法创建图表定制器实例。在 net.sf.jasperreports.engine.fill.JRFillChart.(JRFillChart.java:299) base.JRBaseChart.visit(JRBaseChart.java:639)    在 net.sf.jasperreports.engine.JRAbstractObjectFactory.getVisitResult(JRAbstractObjectFactory.java:89)     在 net.sf.jasperreports.engine.fill.JRFillElementGroup.(JRFillElementGroup.java:83 )     在 net.sf.jasperreports.engine.fill.JRFillElementContainer.(JRFillElementContainer.java:90)     在 net.sf.jasperreports.engine.fill.JRFillBand.(JRFillBand.java:92)     在 net.sf.jasperreports.engine。 fill.JRFillObjectFactory.getBand(JRFillObjectFactory.java:505)     在 net.sf.jasperreports.engine.fill.JRFillSection.(JRFillSection.java:74)     在 net.sf.jasperreports.engine.fill.JRFillObjectFactory.getSection(JRFillObjectFactory.java :481)     在 net.sf.jasperreports.engine.fill.JRFillGroup.(JRFillGroup.java:81)     在 net.sf.jasperrep orts.engine.fill.JRFillObjectFactory.getGroup(JRFillObjectFactory.java:457)    在 net.sf.jasperreports.engine.fill.JRFillVariable.(JRFillVariable.java:84)     在 net.sf.jasperreports.engine.fill.JRFillObjectFactory.getVariable (JRFillObjectFactory.java:437)    在 net.sf.jasperreports.engine.fill.JRFillDataset.addVariable(JRFillDataset.java:335)    在 net.sf.jasperreports.engine.fill.JRFillDataset.setVariables(JRFillDataset.java:325)    在net.sf.jasperreports.engine.fill.JRFillDataset.(JRFillDataset.java:279)     在 net.sf.jasperreports.engine.fill.JRFillObjectFactory.getDataset(JRFillObjectFactory.java:1338)     在 net.sf.jasperreports.engine.fill .JRBaseFiller.(JRBaseFiller.java:397)     在 net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88)     在 net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103)在 net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61)     在 net.sf.jasperreports.engine.fill .JRFiller.createFiller(JRFiller.java:153)     在 net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:55)    在 net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446 )     在 net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276)     在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745)     在 com.jaspersoft.ireport.designer.compiler。 IReportCompiler.run(IReportCompiler.java:891)     在 org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)     在 org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) : java.lang.ClassNotFoundException: 包 com.xyz.bar.chart.customizer    在 java.net.URLClassLoader$1.run(URLClassLoader.java:366)     在 java.net.URLClassLoader$1.run(URLClassLoader.java:355)     在java.security.AccessController.doPrivileged(Native Method)     在 java.net.URLClassLoader.findClass(URLClassLoader.java:354)     在 java.lang.C lassLoader.loadClass(ClassLoader.java:423)     在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)     在 java.lang.ClassLoader.loadClass(ClassLoader.java:356)     在 org.netbeans.ProxyClassLoader.loadClass (ProxyClassLoader.java:252)     在 java.lang.ClassLoader.loadClass(ClassLoader.java:356)     在 java.lang.Class.forName0(Native 方法)     在 java.lang.Class.forName(Class.java:264)     在net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:175)    在 net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115)    在 net.sf.jasperreports.engine。 fill.JRFillChart.(JRFillChart.java:296)     ... 29 更多

我该如何解决这个错误,任何建议都会对我很有帮助。

【问题讨论】:

  • 你添加类到类路径了吗?
  • 是的,我已经在 iReport 的类路径中添加了。
  • 您使用的是什么版本的 iReport?您可以发布所有步骤来重现您的问题吗?
  • @Sharad 显示带有定义定制器类的 jrxml 的一部分:
  • @sanBez 因为我已经更新了我的问题以在 iReport jrxml 中调用自定义程序类,所以我正在编写“package barchartcustomizer”。

标签: java jasper-reports ireport


【解决方案1】:

请参考以下网址:

https://mdahlman.wordpress.com/tag/pie-chart/

您可以在上述链接的“示例报告和图表定制器”部分下载现成的定制器 jar。

下载jar,在ireport classpath中注册jar,在ireport的chart定制器属性中添加包名。

我已经测试并且工作正常。

干杯,

Srikanth Kattam

【讨论】:

  • 我尝试下载但无法下载,并且 chartcustomizer2 用于 Pie 标签而不是 Bar。我有链接,你可以复制那些下载链接。