我已经使用鼠标滚动缩放和水平滑块构建了一个gannt图表。我想在每个子任务栏的中间添加一个三角形,如图所示。
三角形不应受缩放影响,且大小始终相同。 (它可以作为非常小的任务持续时间的指标。)
我知道我可以从ShapeUtilities获得三角形:
Shape arrow = ShapeUtilities.createDownTriangle(4.0f);
如何将这些三角形添加到现有图中?我应该与多个重叠的地块一起去吗?有两种不同的渲染器?使用散点图来绘制三角形?
在我走下一条死胡同之前,我想要一些建议。
非常欢迎一个简单的MCV示例。
答案 0 :(得分: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;
}
}