我已经构建了一个带有鼠标滚动缩放和水平 slider 的甘特图。我想在每个子任务栏的中间添加一个三角形,如图所示。
三角形不应受到缩放的影响并且始终具有相同的大小。 (它充当非常小的任务持续时间的指标。)
我知道我可以从 ShapeUtilities 中获取三角形:
Shape arrow = ShapeUtilities.createDownTriangle(4.0f);
如何将这些三角形添加到现有绘图中?我应该将多个地 block 重叠吗?使用两个不同的渲染器?使用散点图绘制三角形?
在走进死胡同之前,我需要一些建议。
一个简单的MCV示例将是最受欢迎的。
最佳答案
我认为最简单的方法是扩展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;
}
}
关于java - JFreechart 中甘特图栏顶部的向下箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072152/