2015-01-21 2 views
0

마우스 스크롤 및 가로 슬라이더가있는 차트를 이미 만들었습니다. 그림과 같이 각 작업 표시 줄의 중간에 삼각형을 추가하고 싶습니다.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