如何更改 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 甘特图中特定子任务的颜色?的主要内容,如果未能解决你的问题,请参考以下文章