2012-08-31 72 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