我试图重现由不同工具制作的饼图/环形图。除了传说,一切都很好。我需要将值放在每个LegendItem的图形部分中:
我认为我有一个解决方案的大纲,但我希望你经历过jfreecharters,以确定我是在正确的轨道上。我想知道这是否无法以更简单的方式完成?
一种方法可能是继承LegendTitle并覆盖createLegendItemBlock(..)。复制大部分内容,但不是构造LegendGraphic,而是构造一个子类化的LegendGraphic,它知道如何处理形状内的文本。
非常欢迎任何评论。
答案 0 :(得分:0)
我实施了问题中概述的解决方案,并且工作正常。如果有其他人应该遇到问题,这里是处理文本的子类LegendGraphic。子类化的LegendTitle和重写的createLegendItemBlock(..)方法很简单。
class CustomLegendGraphic extends LegendGraphic {
String label;
public CustomLegendGraphic(Shape shape, Paint fillPaint, String label) {
super(shape, fillPaint);
this.label = label;
}
@Override
public Object draw(Graphics2D g2, Rectangle2D area, Object params) {
Object result = super.draw(g2, area, params);
area = trimMargin(area);
Point2D location = RectangleAnchor.coordinates(area, this.getShapeLocation());
TextBlock textBlock = TextUtilities.createTextBlock(label, getItemFont(), Color.white);
textBlock.draw(g2, (float)location.getX(), (float)location.getY(), TextBlockAnchor.CENTER);
return result;
}
}