Jasper レポートの折れ線グラフを使用しています。その折れ線グラフのカテゴリ式では、同じ値が一度だけ出力されます。
ここでは、スレッド名列で折れ線グラフのカテゴリ式を指定しています。冗長な値は出力されません。一意の名前のみが印刷されます。 同じ名前であっても、すべての名前が必要です。この問題を解決するにはどうすればよいですか?
Jasper レポートの折れ線グラフを使用しています。その折れ線グラフのカテゴリ式では、同じ値が一度だけ出力されます。
ここでは、スレッド名列で折れ線グラフのカテゴリ式を指定しています。冗長な値は出力されません。一意の名前のみが印刷されます。 同じ名前であっても、すべての名前が必要です。この問題を解決するにはどうすればよいですか?
一意性制約を満たすオブジェクトに、カテゴリ ラベルとして出力される文字列値をラップする必要があります。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 型である必要があり、これですべての魔法が行われます。
これが繰り返される値を表示する唯一の方法であるため、一意の識別子をカテゴリ式に追加する必要があります。