在LegendItems图形形状内显示值

时间:2014-06-01 09:57:39

标签: java jfreechart

我试图重现由不同工具制作的饼图/环形图。除了传说,一切都很好。我需要将值放在每个LegendItem的图形部分中:

Image

enter image description here

我认为我有一个解决方案的大纲,但我希望你经历过jfreecharters,以确定我是在正确的轨道上。我想知道这是否无法以更简单的方式完成?

一种方法可能是继承LegendTitle并覆盖createLegendItemBlock(..)。复制大部分内容,但不是构造LegendGraphic,而是构造一个子类化的LegendGraphic,它知道如何处理形状内的文本。

非常欢迎任何评论。

1 个答案:

答案 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;
    }
}