我有一个带有折线图的JasperReport,我需要在其上显示标签,但我希望它们有条件地显示每个数据点。我已经创建了自定义程序类来实际显示值,但是我想使用与值字段不同的字段来决定它是否应该显示。
基本上在我的DataSet中我有3个字段:
Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field
我想仅在PrintValue = true
时打印标签中的值答案 0 :(得分:0)
一种解决方案是在Scriptlet类中覆盖JRDefaultScriptlet实现的方法之一,然后以您想要的任何方式设置“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);
}
由于您希望为每个刻度标记有条件地显示类别标签,因此您可能需要使用键/值对的映射。 key是类别标签,“PRINTVALUE”的值为true / false。注意我没有在上面的示例代码中说明这一点,但它完全可能。只需将报告变量声明为地图,例如HashMap<String, Boolean> hm
。
您需要将新的scriplet类添加到iReport中的Classpath。
希望这有助于或至少让你开始。