Java 显示LegendItems图形形状内的值

Java 显示LegendItems图形形状内的值,java,jfreechart,Java,Jfreechart,我试图复制一个由不同工具生成的piechart/ringplot。除了传说,一切都很好。我需要在每个LegendItem的图形部分中输入值: 我想我有一个解决方案的大纲,但希望你有经验的jfreecharters来确认我在正确的轨道上。我想知道这是不是可以用一种更简单的方法 一种方法是将LegendTitle子类化并覆盖createLegendItemBlock。。。复制大部分内容,但不要构建LegendGraphic,而是构建一个子类LegendGraphic,它知道如何处理形状内的文本 欢迎

我试图复制一个由不同工具生成的piechart/ringplot。除了传说,一切都很好。我需要在每个LegendItem的图形部分中输入值:

我想我有一个解决方案的大纲,但希望你有经验的jfreecharters来确认我在正确的轨道上。我想知道这是不是可以用一种更简单的方法

一种方法是将LegendTitle子类化并覆盖createLegendItemBlock。。。复制大部分内容,但不要构建LegendGraphic,而是构建一个子类LegendGraphic,它知道如何处理形状内的文本


欢迎发表任何意见。

我实施了问题中概述的解决方案,效果很好。如果其他人遇到这个问题,下面是处理文本的子类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;
    }
}

我认为你在正确的轨道上。JFreeChart中的图例代码有点过于复杂,在Orson Charts中,如果我更富有的话,会是JFreeChart3D,我想出了一个更简单的图例机制。我正在考虑将同样的方法推广到JFreeChart 2.0中,并删除现有的图例代码。但现在在JFreeChart 1.0.x中,这对您没有帮助,您所做的对我来说似乎是正确的方法。无论如何,感谢您的回复。虽然图例代码看起来相当复杂,但我对jfreechart库的总体设计印象深刻。