2012-08-31 43 views
4

在我的JFreeChart时间序列图我找到传说线薄准确地看到的颜色。另一篇文章[jfreechart - change sample of colors in legend] 建议重写渲染方法如下:JFreeChart的传说显示

renderer = new XYLineAndShapeRenderer() 
{ 
    private static final long serialVersionUID = 1L; 
    public Shape lookupLegendShape(int series) 
    { 
     return new Rectangle(15, 15); 
    } 
}; 

这种方法工作得很好,直到你做什么我做

renderer.setSeriesShapesVisible(i, false); 

一旦我做到了传说恢复为一条线。这有什么办法吗?

我采用的解决方案接近于TrashGod建议的解决方案我覆盖了getLegendItem()方法,强制图例形状到所需的方框。

renderer = new XYLineAndShapeRenderer() 
    { 
     private static final long serialVersionUID = 1L; 

     public LegendItem getLegendItem(int datasetIndex, int series) 
     { 
      LegendItem legend = super.getLegendItem(datasetIndex, series); 
      return new LegendItem(legend.getLabel(), legend.getDescription(), legend.getToolTipText(), legend.getURLText(), Plot.DEFAULT_LEGEND_ITEM_BOX, legend.getFillPaint()); 
     } 
    }; 

回答

4

您将不得不重写getLegendItem()以获取LegendItem来代替渲染器创建的那个。

附录:下面是一个简单的例子,应该可以帮助您开始。

XYPlot plot = (XYPlot) chart.getPlot(); 
plot.setRenderer(new MyRenderer()); 
... 
private static class MyRenderer extends XYLineAndShapeRenderer { 

    @Override 
    public LegendItem getLegendItem(int dataset, int series) { 
     LegendItem legendItem = super.getLegendItem(dataset, series); 
     System.out.println(dataset + " " + series + " " + legendItem.getShape()); 
     // modify legendItem here 
     return legendItem; 
    } 
} 
+0

我可能在这里有点慢,但你能给我一个线索如何做到这一点?我很乐意简单地用Plot.DEFAULT_LEGEND_ITEM_BOX替换图例图形,但我不确定如何保持图例信息的其余部分与原始图形一致。我是否只需获取所有属性并将它们设置为新的图例? –

+0

@RichardB:我已经概述了上面的方法。 – trashgod

+0

谢谢。我稍微修改了您的方法(请参阅上文) –

2

获取渲染器并执行以下操作:

XYItemRenderer renderer = plot.getRenderer(); 
BasicStroke thickLine = new BasicStroke(4.0f); 
renderer.setSeriesStroke(0, thickLine); 

这会让你的线变粗。

+1

+1正在渲染线较厚OK? – trashgod

+0

如果问题在于线条变细,则调整渲染线条的粗细。所以,那好吧。 – fonZ

+0

啊,这很有道理。只需要重写'getLegendItem()'以从渲染器中获得_DIFfers_的'LegendItem'。 – trashgod