在JFreechart中的甘特图栏顶部向下箭头

时间:2015-01-21 16:29:21

标签: java user-interface charts jfreechart gantt-chart

我已经使用鼠标滚动缩放和水平滑块构建了一个gannt图表。我想在每个子任务栏的中间添加一个三角形,如图所示。

三角形不应受缩放影响,且大小始终相同。 (它可以作为非常小的任务持续时间的指标。)

Ganntchart with red triangles that need to be added!

我知道我可以从ShapeUtilities获得三角形:

Shape arrow = ShapeUtilities.createDownTriangle(4.0f);

如何将这些三角形添加到现有图中?我应该与多个重叠的地块一起去吗?有两种不同的渲染器?使用散点图来绘制三角形?

在我走下一条死胡同之前,我想要一些建议。

非常欢迎一个简单的MCV示例。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是扩展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;
    }
}