Как создать альтернативные цвета на фоне диаграммы Ганта с помощью JFreeChart? - PullRequest
0 голосов
/ 27 сентября 2019

Я рисую диаграмму Ганта, используя библиотеки JFreeChart.Я хотел бы знать, как установить альтернативные цвета фона для каждой строки в диаграмме ganttchart.

Я могу изменить цвет фона диаграммы, используя plot.setBackgroundPaint (Color.WHITE).Я умею рисовать линии для каждой строки, используя plot.setDomainGridlinePaint (Color.GRAY).

Я пытался использовать plot.getRangeMarkers (Layer.BACKGROUND) и перебирать его.Но оператор возвращает ноль.

private void createGanttChart() throws IOException {

    IntervalCategoryDataset dataset = getCategoryDataset();

    JFreeChart chart = ChartFactory.createGanttChart("", "", "", dataset, false, true, false);
    final CategoryPlot plot = (CategoryPlot) chart.getPlot();
    MyRenderer renderer = new MyRenderer();
    renderer.setBarPainter(new StandardBarPainter());
    plot.setRenderer(renderer);
    renderer.getItemPaint(1, 1);
    renderer.setShadowVisible(false);

    plot.setBackgroundPaint(new Color(255, 255, 255));
    plot.setRangeGridlinesVisible(true);
    plot.setRangeGridlinePaint(Color.GRAY);
    // saving the chart as png file

    String fileName = "../Test/imageForGanttChart.png";

    File file = new File(fileName);
    ChartUtilities.saveChartAsPNG(file, chart, 820, 400);

}

class MyRenderer extends GanttRenderer {
    private final Color subtask1Color = new Color(160, 198, 247);
    private static final long serialVersionUID = 1L;

    public MyRenderer() {
        super();
    }

    @Override
    public Paint getItemPaint(int row, int col) {
        return subtask1Color;
    }
}

private IntervalCategoryDataset getCategoryDataset() {

    TaskSeries series1 = new TaskSeries("Estimated Date");
    series1.add(
            new Task("Mobilization", Date.from(LocalDate.of(2017, 7, 3).atStartOfDay().toInstant(ZoneOffset.UTC)),
                    Date.from(LocalDate.of(2017, 7, 7).atStartOfDay().toInstant(ZoneOffset.UTC))));

    series1.add(new Task("KT", Date.from(LocalDate.of(2017, 7, 10).atStartOfDay().toInstant(ZoneOffset.UTC)),
            Date.from(LocalDate.of(2017, 7, 14).atStartOfDay().toInstant(ZoneOffset.UTC))));
    TaskSeries series2 = new TaskSeries("Actual Date");
    series2.add(
            new Task("Mobilization", Date.from(LocalDate.of(2017, 7, 3).atStartOfDay().toInstant(ZoneOffset.UTC)),
                    Date.from(LocalDate.of(2017, 7, 05).atStartOfDay().toInstant(ZoneOffset.UTC))));

    series2.add(new Task("KT", Date.from(LocalDate.of(2017, 7, 6).atStartOfDay().toInstant(ZoneOffset.UTC)),
            Date.from(LocalDate.of(2017, 7, 17).atStartOfDay().toInstant(ZoneOffset.UTC))));

    TaskSeriesCollection dataset = new TaskSeriesCollection();
    dataset.add(series1);
    dataset.add(series2);
    return dataset;
}
...