2015-01-21 3 views
0

Я уже построил диаграмму gannt с помощью мыши с прокруткой и горизонтальным слайдером. Я хочу добавить треугольник в середине каждой панели подпрограмм, как показано на рисунке.Стрелки вниз в верхней части диаграмм диаграммы gantt в JFreechart

Треугольник не должен зависеть от масштабирования и всегда быть того же размера. (Она выступает в качестве показателя для очень малых длительностей задач.)

Ganntchart with red triangles that need to be added!

Я знаю, что могу получить треугольник из ShapeUtilities:

Shape arrow = ShapeUtilities.createDownTriangle(4.0f); 

Как я могу добавить эти треугольники в существующий сюжет ? Должен ли я идти с несколькими графиками, перекрывающимися? С двумя разными рендерингами? Использовать диаграмму рассеяния для построения треугольников?

Я хочу несколько предложений, прежде чем спуститься по тупику.

Простой пример MCV будет очень желанным.

ответ

1

Я думаю, что самым простым способом является расширение GanttRenderer и добавление второго прохода, который рисует треугольник.

Следующий визуализатор должен сделать трюк. Просто добавьте рисунок треугольника в процедуру drawTriangle.

import java.awt.Graphics2D; 
import java.awt.geom.Rectangle2D; 

import org.jfree.chart.axis.CategoryAxis; 
import org.jfree.chart.axis.ValueAxis; 
import org.jfree.chart.plot.CategoryPlot; 
import org.jfree.chart.renderer.category.CategoryItemRendererState; 
import org.jfree.chart.renderer.category.GanttRenderer; 
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.gantt.GanttCategoryDataset; 

public class TriangleGanttRenderer 
    extends GanttRenderer 
{ 
    public TriangleGanttRenderer() 
    { 
    } 

    @Override 
    public void drawItem(Graphics2D g2, CategoryItemRendererState state, Rectangle2D dataArea, CategoryPlot plot, 
     CategoryAxis domainAxis, ValueAxis rangeAxis, CategoryDataset dataset, int row, int column, int pass) 
    { 
     if (pass == 1 && (dataset instanceof GanttCategoryDataset)) 
     { 
      drawTriangle(g2, state, dataArea, plot, domainAxis, rangeAxis, dataset, row, column); 
     } 
     else 
     { 
      super.drawItem(g2, state, dataArea, plot, domainAxis, rangeAxis, dataset, row, column, pass); 
     } 
    } 

    protected void drawTriangle(Graphics2D g2, CategoryItemRendererState state, Rectangle2D dataArea, 
     CategoryPlot plot, CategoryAxis domainAxis, ValueAxis rangeAxis, CategoryDataset dataset, int row, int column) 
    { 
     // ... add your draw routine here ... 
    } 

    @Override 
    public int getPassCount() 
    { 
     return 2; 
    } 
} 
+0

Ответил ли это на ваш вопрос? В таком случае, пожалуйста, отметьте свой вопрос как разрешенный. Благодаря! – Uli

Смежные вопросы