Я рисую диаграмму Ганта, используя библиотеки 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;
}