我认为最简单的方法是扩展GanttRenderer 并添加绘制三角形的第二遍。
下面的渲染器应该可以解决问题。只需将三角形的绘制添加到drawTriangle 例程中即可。
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.chart.renderer.category.GanttRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.gantt.GanttCategoryDataset;
public class TriangleGanttRenderer
extends GanttRenderer
{
public TriangleGanttRenderer()
{
}
@Override
public void drawItem(Graphics2D g2, CategoryItemRendererState state, Rectangle2D dataArea, CategoryPlot plot,
CategoryAxis domainAxis, ValueAxis rangeAxis, CategoryDataset dataset, int row, int column, int pass)
{
if (pass == 1 && (dataset instanceof GanttCategoryDataset))
{
drawTriangle(g2, state, dataArea, plot, domainAxis, rangeAxis, dataset, row, column);
}
else
{
super.drawItem(g2, state, dataArea, plot, domainAxis, rangeAxis, dataset, row, column, pass);
}
}
protected void drawTriangle(Graphics2D g2, CategoryItemRendererState state, Rectangle2D dataArea,
CategoryPlot plot, CategoryAxis domainAxis, ValueAxis rangeAxis, CategoryDataset dataset, int row, int column)
{
// ... add your draw routine here ...
}
@Override
public int getPassCount()
{
return 2;
}
}