问题描述
您将不得不重写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; } }
@H_403_11@解决方法
在我的JFreeChart时间序列图中,我发现图例线条变细以准确查看颜色。另一篇文章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()); } };