0

Jasper レポートの折れ線グラフを使用しています。その折れ線グラフのカテゴリ式では、同じ値が一度だけ出力されます。

ここに画像の説明を入力

ここでは、スレッド名列で折れ線グラフのカテゴリ式を指定しています。冗長な値は出力されません。一意の名前のみが印刷されます。 同じ名前であっても、すべての名前が必要です。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

一意性制約を満たすオブジェクトに、カテゴリ ラベルとして出力される文字列値をラップする必要があります。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;
    }
}

equals メソッドは比較されるオブジェクトの ID が同じかどうかをチェックするため、異なる ID を使用して UniqueCategoryLabel のインスタンスを作成することにより、一意性を提供できます。チャート自体のラベルは、提供されたオブジェクトの toString() メソッドを使用して作成されるため、 toString() メソッドは、ラベルとして印刷する文字列を返す必要があります。レポートでは、グラフに使用するフィールドは String ではなく UniqueCategoryLabel 型である必要があり、これですべての魔法が行われます。

于 2013-04-03T13:03:29.630 に答える
0

これが繰り返される値を表示する唯一の方法であるため、一意の識別子をカテゴリ式に追加する必要があります。

于 2013-02-02T11:40:29.300 に答える