私は同じ問題に遭遇しました。チャートごとに1つの店舗を用意するのではなく、各シリーズに店舗を設けると、はるかに優れたデザインになります。
metricDataStoreにメトリック値の長いリストが1つありました。各メトリック値には説明があります。1つの(そして1つだけの)シリーズに同じ説明を持つすべてのメトリック値を表示したかったのです。値がシリーズに含まれるはずがない場合、各シリーズの値プロバイダーがx軸とy軸の両方でnullを返すようにしました。
これは私にはハックのように見えますが、私の使用法では機能します。
myChart = new Chart<MetricData>();
myChart.setStore(metricDataStore);
。。。
for (MetricInfo info : metricInfoData) {
LineSeries<MetricData> series = new LineSeries<MetricData>();
series.setChart(myChart);
series.setSmooth(false);
series.setShownInLegend(true);
series.setHighlighting(true);
series.setYAxisPosition(Chart.Position.LEFT);
series.setYField(new MetricValueProvider(info.getName()));
series.setXAxisPosition(Chart.Position.BOTTOM);
series.setXField(new MetricTimeProvider(info.getName()));
myChart.addSeries(series);
}
。。。
private class MetricTimeProvider extends Object implements ValueProvider<MetricData, Long> {
private String metricName;
public MetricTimeProvider(String metricName) {
this.metricName = metricName;
}
@Override
public Long getValue(MetricData m) {
if (metricName != null && metricName.equals(m.getLongDesc()))
return m.getId();
else
return null;
}
@Override
public void setValue(MetricData m, Long value) {
}
@Override
public String getPath() {
return null;
}
}
private class MetricValueProvider extends Object implements ValueProvider<MetricData, Double> {
private String metricName;
public MetricValueProvider(String metricName) {
this.metricName = metricName;
}
@Override
public Double getValue(MetricData m) {
if (metricName != null && metricName.equals(m.getLongDesc()))
return m.getMetricValue();
else
return null;
}
@Override
public void setValue(MetricData m, Double value) {
}
@Override
public String getPath() {
return null;
}
}