【问题标题】:Down arrows on top of gantt chart bars in JFreechartJFreechart 中甘特图栏顶部的向下箭头
【发布时间】:2015-01-21 16:29:21
【问题描述】:

我已经建立了一个带有鼠标滚动缩放和水平滑块的甘特图。我想在每个子任务栏的中间添加一个三角形,如图所示。

三角形不应受到缩放的影响,并且始终具有相同的大小。 (它作为非常小的任务持续时间的指标。)

我知道我可以从 ShapeUtilities 中获取三角形:

Shape arrow = ShapeUtilities.createDownTriangle(4.0f);

如何将这些三角形添加到现有绘图中?我应该使用多个重叠的地块吗?使用两个不同的渲染器?使用散点图绘制三角形?

在我走上死胡同之前,我想要一些建议。

欢迎提供一个简单的MCV 示例。

【问题讨论】:

    标签: java user-interface charts jfreechart gantt-chart


    【解决方案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;
        }
    }
    

    【讨论】:

    • 这能回答你的问题吗?在这种情况下,请将您的问题标记为已解决。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多