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

标签 java user-interface charts jfreechart gantt-chart

我已经构建了一个带有鼠标滚动缩放和水平 slider 的甘特图。我想在每个子任务栏的中间添加一个三角形,如图所示。

三角形不应受到缩放的影响并且始终具有相同的大小。 (它充当非常小的任务持续时间的指标。)

Ganntchart with red triangles that need to be added!

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

Shape arrow = ShapeUtilities.createDownTriangle(4.0f);

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

在走进死胡同之前,我需要一些建议。

一个简单的MCV示例将是最受欢迎的。

最佳答案

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

关于java - JFreechart 中甘特图栏顶部的向下箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072152/

相关文章:

java - 获取 BiSet 实例的长度

command-line - PowerShell:您可以 Hook 或拦截PowerShell对外部应用程序的执行吗?

javascript - 如何绘制包含多个数据但只有2个标签的折线图?

Delphi7 TeeChart v4 图例 - 如何滚动?

java - 独立程序中的公共(public)变量

c# 任何很酷的图形库来绘制性能数据?

java - 在 Chef 中记录 Java 异常

java - 用于将 Java 类型映射到 Cassandra 类型的 DataStax API

java - 玩2.2 不带插件启动DefaultApplication

JavaFX - 如何在 fxml Controller 初始化期间设置值