这是我实现“UniqueValue”的方法。
public class UniqueValue implements Comparable<UniqueValue> {
private final String uniqueId;
private final String value;
public UniqueValue(String uniqueId, String value) {
this.uniqueId = uniqueId;
this.value = value;
}
@Override
public int compareTo(UniqueValue o) {
return uniqueId.compareTo(o.uniqueId);
}
@Override
public int hashCode() {
return uniqueId.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof UniqueValue) {
return uniqueId.equals(((UniqueValue)obj).uniqueId);
}
return false;
}
@Override
public String toString() {
return value;
}
}
您可以使用这个类来处理我在问题中提到的唯一性问题。
更新
然而,由于JFreeChart使用toString()
方法创建类别标签,因此UniqueValue
中的toString()
实现可能非常奇怪。因此,这里有另一个尝试。
首先是一个生成器接口。
public interface CategoryLabelGenerator {
public String generate(Comparable<?> category);
}
接下来,我为CategoryAxis
创建了一个子类。
public class CategoryLabelCustomizableCategoryAxis extends CategoryAxis {
private static final long serialVersionUID = 1L;
private CategoryLabelGenerator labelGenerator;
public CategoryLabelCustomizableCategoryAxis(String label) {
super(label);
}
public void setCategoryLabelGenerator(CategoryLabelGenerator generator) {
this.labelGenerator = generator;
}
@Override
protected TextBlock createLabel(Comparable category, float width,
RectangleEdge edge, Graphics2D g2) {
if (generator == null) {
return super.createLabel(category, width, edge, g2);
}
return TextUtilities.createTextBlock(
labelGenerator.generate(category),
getTickLabelFont(category), getTickLabelPaint(category), width,
getMaximumCategoryLabelLines(), new G2TextMeasurer(g2));
}
}
例子:
JFreeChart chart = makeChart();
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis axis = new CategoryLabelCustomizableCategoryAxis();
axis.setCategoryLabelGenerator(new MyCategoryLabelGenerator());
plot.setDomainAxis(axis);
这是我如何自定义类别标签的方法。(至少对于使用
CategoryAxis
作为域轴的图表来说是这样的。)
UniqueValue
类的方式请参见我的答案。 - Rangi Lin