Как изменить цвет конкретной подзадачи в диаграмме Ганта JFreeChart?

У меня есть диаграмма Ганта с 5 задачами. Каждая задача разделена на 3 подзадачи. Мне нужно определить разные цвета для каждой подзадачи, например. Подзадача1: "светло-голубой", Подзадача2: "синий", Подзадача3: "темно-синий". Я попытался найти несколько примеров в Google, но не нашел ни одного полного рабочего примера. Спасибо.

Обновление № 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)));

person Klausos Klausos    schedule 18.01.2012    source источник


Ответы (1)


Вы можете переопределить getItemPaint(), как описано здесь.

Приложение: Поскольку на диаграмме Гнатта используется 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);
    }
}
person trashgod    schedule 18.01.2012
comment
Я читал эту тему, но я не понимаю, что должно быть в целом решение. Мне нужен небольшой и четкий пример. - person Klausos Klausos; 19.01.2012
comment
Я пробовал этот код. Но я не понимаю, где определяются цвета подзадач? Если я сделаю только это, то все подзадачи по-прежнему будут иметь один и тот же синий цвет. - person Klausos Klausos; 19.01.2012
comment
Где мне нужно использовать getHSBColor()? Внутри getItemPaint или где? - person Klausos Klausos; 19.01.2012
comment
Похоже, что getItemPaint() получает строку и столбец, но вам придется запросить модель у getSubtaskCount(). Я вижу два прохода, но вы можете переопределить drawItem(), чтобы быть уверенным. - person trashgod; 20.01.2012
comment
Не могли бы вы привести пример с getSubtaskCount()? Я бы не хотел использовать drawItem(), так как это менее гибкий метод. - person Klausos Klausos; 20.01.2012
comment
Полный пример выходит за рамки SO. Вы, вероятно, можете принять два прохода в качестве начала. Это ваша модель данных; просто вызовите getSubtaskCount() для соответствующего Task. Может помочь sscce, который показывает репрезентативные данные и выбор цвета. - person trashgod; 20.01.2012