如何更改 JFreeChart 甘特图中特定子任务的颜色?

Posted

技术标签:

【中文标题】如何更改 JFreeChart 甘特图中特定子任务的颜色?【英文标题】:How to change color of particular sub-task in JFreeChart Gantt Chart? 【发布时间】:2012-02-13 10:56:01 【问题描述】:

我有一个包含 5 个任务的甘特图。每个任务分为3个子任务。我需要为每个子任务定义不同的颜色,例如子任务1:“浅蓝色”,子任务2:“蓝色”,子任务3:“深蓝色”。我试图用谷歌搜索一些示例,但没有找到任何完整的工作示例。谢谢。

更新#1: 我正在为数据集使用 IntervalCategoryDataset。

IntervalCategoryDataset dataset = createDataset(data);

final Task t = new Task("Resource " + i, date(time11), date(time14));
t.addSubtask(new Task("Resource " + i, date(time11), date(time12)));
t.addSubtask(new Task("Resource " + i, date(time12), date(time13)));
t.addSubtask(new Task("Resource " + i, date(time13), date(time14)));

【问题讨论】:

【参考方案1】:

您可以覆盖渲染器的getItemPaint() 方法,如here 所述。

附录:由于 Gnatt 图表使用 GanttRenderer,因此您可以执行以下操作来查看现有颜色。只需为给定的行和列返回您选择的颜色。

plot.setRenderer(new MyRenderer());
...
private static class MyRenderer extends GanttRenderer 

    @Override
    public Paint getItemPaint(int row, int col) 
        System.out.println(row + " " + col + " " + super.getItemPaint(row, col));
        return super.getItemPaint(row, col);
    

【讨论】:

我阅读了这个主题,但我不明白整个解决方案应该是什么。我需要一些小而清晰的例子。 我试过这段代码。但我不明白子任务的颜色在哪里定义?如果我只这样做,那么所有子任务仍然具有相同的蓝色。 在哪里需要使用getHSBColor()?在 getItemPaint 里面还是在哪里? 看起来getItemPaint() 接收了行和列,但您必须将模型查询到getSubtaskCount()。我看到了两次通过,但您可以覆盖 drawItem() 以确保。 一个完整的例子超出了 SO 的范围。您可能可以假设两次通过作为开始。这是您的数据模型;只需在相关的Task 上调用getSubtaskCount()。显示代表性数据和颜色选择的sscce 可能会有所帮助。

以上是关于如何更改 JFreeChart 甘特图中特定子任务的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing:开源甘特图库

更改甘特图中子任务颜色的代码

JFreeChart给甘特图加一条当日时间线

甘特图中与任务有关的操作(Project)

JFreeChart的使用

怎么把PROJECT 2013,在甘特图区域把 左边工作表中填写好的资源不在甘特图中显示。 如图所示