Jasper报告折线图类别表达式相同的值只打印一次

时间:2013-02-02 10:24:40

标签: java jasper-reports ireport

我正在使用Jasper报告折线图。在该折线图中,类别表达式相同的值仅打印一次

enter image description here

此处,“线程名称”列在折线图中指定为类别表达式。不打印冗余值。 仅打印唯一名称我想要所有名字,即使它的名字相同。怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

您必须将作为类别标签打印的String值包装到满足唯一性约束的对象中。您必须创建一个实现Comparable接口的java类,因为只有不相等的对象才会打印为单独的类别值。以下代码显示了如何实现此类:

public class UniqueCategoryLabel implements Comparable<UniqueCategoryLabel> {

    private Double id;
    private String value;

    public UniqueCategoryLabel(String value, Double id) {
        this.value = value;
        this.id = id;
    }

    @Override
    public int compareTo(UniqueCategoryLabel v) {
        return this.id.compareTo(v.id);
    }

    @Override
    public boolean equals(Object v) {
        return v instanceof UniqueCategoryLabel && this.id.equals(((UniqueCategoryLabel) v).id);
    }

    @Override
    public int hashCode() {
        return this.id.hashCode();
    }

    @Override
    public String toString() {
        return value;
    }
}

您可以通过使用不同的ID创建UniqueCategoryLabel实例来提供唯一性,因为equals方法检查比较对象的ID是否相同。图表的标签本身是使用提供的对象的toString()方法创建的,因此toString()方法应该返回要作为标签打印的String。在您的报告中,您用于图表的字段必须是UniqueCategoryLabel类型而不是String,并且应该完成所有魔法。

答案 1 :(得分:0)

您需要为类别表达式添加唯一标识符,因为这是显示重复值的唯一方法。