【问题标题】:How to change color of particular sub-task in JFreeChart Gantt Chart?如何更改 JFreeChart 甘特图中特定子任务的颜色?
【发布时间】: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)));

【问题讨论】:

    标签: colors task jfreechart gantt-chart


    【解决方案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 可能会有所帮助。
    猜你喜欢
    • 2012-02-14
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多