我有一个带有折线图的 JasperReport,我需要在其上显示标签,但我希望它们有条件地显示每个数据点。我创建了自定义程序类来实际显示值,但我想使用与值字段不同的字段来决定是否应该显示它。
基本上在我的数据集中我有 3 个字段:
Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field
我只想在 PrintValue=true 时打印标签中的值
我有一个带有折线图的 JasperReport,我需要在其上显示标签,但我希望它们有条件地显示每个数据点。我创建了自定义程序类来实际显示值,但我想使用与值字段不同的字段来决定是否应该显示它。
基本上在我的数据集中我有 3 个字段:
Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field
我只想在 PrintValue=true 时打印标签中的值
一种解决方案是覆盖 JRDefaultScriptlet 在 scriptlet 类中实现的方法之一,然后以您希望的任何方式设置“PrintValue”的值。然后在您的图表数据集中,您应该能够将其$V{PRINTVALUE}
作为操作数进行引用。
我将假设您使用 iReport 进行报告设计。
在 iReport 中打开您的报告并单击报告名称(报告检查器中最顶部的节点)
将 Scriplet 类设置为您的包名称和类,例如 org.company.scriptlets.MyChartClass
在 iReport 中声明您的报告变量。在这种情况下,“PRINTVALUE”将是变量名。
创建一个覆盖 scriplet 方法的 java 类,例如 beforeDetailEval,例如:
@Override
public void beforeDetailEval() throws JRScriptletException {
super.beforeDetailEval();
...
this.setVariableValue("PRINTVALUE", true);
}
由于您希望有条件地为每个刻度线显示类别标签,因此您可能需要使用键/值对的 Map。键是类别标签,“PRINTVALUE”的值是真/假。注意我没有在上面的示例代码中说明这一点,但它完全有可能。只需将您的报告变量声明为 Map,例如HashMap<String, Boolean> hm
.
您需要将新的 scriplet 类添加到 iReport 中的 Classpath。
希望这有助于或至少让你开始。