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