⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ganttrenderer2.java

📁 jfreechart 1.0.6 demo 源代码
💻 JAVA
字号:




package demo;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.io.Serializable;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.CategoryItemEntity;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.event.RendererChangeEvent;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.chart.renderer.category.IntervalBarRenderer;
import org.jfree.chart.urls.CategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.gantt.GanttCategoryDataset;

public class GanttRenderer2 extends IntervalBarRenderer
    implements Serializable
{

    public GanttRenderer2()
    {
        setIncludeBaseInRange(false);
        completePaint = Color.green;
        incompletePaint = Color.red;
        startPercent = 0.34999999999999998D;
        endPercent = 0.65000000000000002D;
    }

    public Paint getCompletePaint()
    {
        return completePaint;
    }

    public void setCompletePaint(Paint paint)
    {
        if(paint == null)
        {
            throw new IllegalArgumentException("Null 'paint' argument.");
        } else
        {
            completePaint = paint;
            notifyListeners(new RendererChangeEvent(this));
            return;
        }
    }

    public Paint getIncompletePaint()
    {
        return incompletePaint;
    }

    public void setIncompletePaint(Paint paint)
    {
        if(paint == null)
        {
            throw new IllegalArgumentException("Null 'paint' argument.");
        } else
        {
            incompletePaint = paint;
            notifyListeners(new RendererChangeEvent(this));
            return;
        }
    }

    public double getStartPercent()
    {
        return startPercent;
    }

    public void setStartPercent(double d)
    {
        startPercent = d;
        notifyListeners(new RendererChangeEvent(this));
    }

    public double getEndPercent()
    {
        return endPercent;
    }

    public void setEndPercent(double d)
    {
        endPercent = d;
        notifyListeners(new RendererChangeEvent(this));
    }

    public void drawItem(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, ValueAxis valueaxis, CategoryDataset categorydataset, 
            int i, int j, int k)
    {
        if(categorydataset instanceof GanttCategoryDataset)
        {
            GanttCategoryDataset ganttcategorydataset = (GanttCategoryDataset)categorydataset;
            drawTasks(graphics2d, categoryitemrendererstate, rectangle2d, categoryplot, categoryaxis, valueaxis, ganttcategorydataset, i, j);
        } else
        {
            super.drawItem(graphics2d, categoryitemrendererstate, rectangle2d, categoryplot, categoryaxis, valueaxis, categorydataset, i, j, k);
        }
    }

    protected void drawTasks(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, ValueAxis valueaxis, GanttCategoryDataset ganttcategorydataset, 
            int i, int j)
    {
        int k = ganttcategorydataset.getSubIntervalCount(i, j);
        if(k == 0)
            drawTask(graphics2d, categoryitemrendererstate, rectangle2d, categoryplot, categoryaxis, valueaxis, ganttcategorydataset, i, j);
        for(int l = 0; l < k; l++)
        {
            org.jfree.ui.RectangleEdge rectangleedge = categoryplot.getRangeAxisEdge();
            Number number = ganttcategorydataset.getStartValue(i, j, l);
            if(number == null)
                return;
            double d = valueaxis.valueToJava2D(number.doubleValue(), rectangle2d, rectangleedge);
            Number number1 = ganttcategorydataset.getEndValue(i, j, l);
            if(number1 == null)
                return;
            double d1 = valueaxis.valueToJava2D(number1.doubleValue(), rectangle2d, rectangleedge);
            if(d1 < d)
            {
                double d2 = d1;
                d1 = d;
                d = d2;
            }
            double d3 = calculateBarW0(categoryplot, categoryplot.getOrientation(), rectangle2d, categoryaxis, categoryitemrendererstate, i, j);
            double d4 = Math.abs(d1 - d);
            double d5 = categoryitemrendererstate.getBarWidth();
            java.awt.geom.Rectangle2D.Double double1 = null;
            if(categoryplot.getOrientation() == PlotOrientation.HORIZONTAL)
                double1 = new java.awt.geom.Rectangle2D.Double(d, d3, d4, d5);
            else
            if(categoryplot.getOrientation() == PlotOrientation.VERTICAL)
                double1 = new java.awt.geom.Rectangle2D.Double(d3, d, d5, d4);
            java.awt.geom.Rectangle2D.Double double2 = null;
            java.awt.geom.Rectangle2D.Double double3 = null;
            Number number2 = ganttcategorydataset.getPercentComplete(i, j, l);
            double d6 = getStartPercent();
            double d7 = getEndPercent();
            if(number2 != null)
            {
                double d8 = number2.doubleValue();
                if(categoryplot.getOrientation() == PlotOrientation.HORIZONTAL)
                {
                    double2 = new java.awt.geom.Rectangle2D.Double(d, d3 + d6 * d5, d4 * d8, d5 * (d7 - d6));
                    double3 = new java.awt.geom.Rectangle2D.Double(d + d4 * d8, d3 + d6 * d5, d4 * (1.0D - d8), d5 * (d7 - d6));
                } else
                if(categoryplot.getOrientation() == PlotOrientation.VERTICAL)
                {
                    double2 = new java.awt.geom.Rectangle2D.Double(d3 + d6 * d5, d + d4 * (1.0D - d8), d5 * (d7 - d6), d4 * d8);
                    double3 = new java.awt.geom.Rectangle2D.Double(d3 + d6 * d5, d, d5 * (d7 - d6), d4 * (1.0D - d8));
                }
            }
            Paint paint = getItemPaint(i, j);
            graphics2d.setPaint(paint);
            graphics2d.fill(double1);
            if(double2 != null)
            {
                graphics2d.setPaint(getCompletePaint());
                graphics2d.fill(double2);
            }
            if(double3 != null)
            {
                graphics2d.setPaint(getIncompletePaint());
                graphics2d.fill(double3);
            }
            if(isDrawBarOutline() && categoryitemrendererstate.getBarWidth() > 3D)
            {
                graphics2d.setStroke(getItemStroke(i, j));
                graphics2d.setPaint(getItemOutlinePaint(i, j));
                graphics2d.draw(double1);
            }
            if(categoryitemrendererstate.getInfo() == null)
                continue;
            EntityCollection entitycollection = categoryitemrendererstate.getEntityCollection();
            if(entitycollection == null)
                continue;
            String s = null;
            if(getToolTipGenerator(i, j) != null)
                s = getToolTipGenerator(i, j).generateToolTip(ganttcategorydataset, i, j);
            String s1 = null;
            if(getItemURLGenerator(i, j) != null)
                s1 = getItemURLGenerator(i, j).generateURL(ganttcategorydataset, i, j);
            CategoryItemEntity categoryitementity = new CategoryItemEntity(double1, s, s1, ganttcategorydataset, ganttcategorydataset.getRowKey(i), ganttcategorydataset.getColumnKey(j));
            entitycollection.add(categoryitementity);
        }

    }

    protected void drawTask(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, ValueAxis valueaxis, GanttCategoryDataset ganttcategorydataset, 
            int i, int j)
    {
        PlotOrientation plotorientation = categoryplot.getOrientation();
        org.jfree.ui.RectangleEdge rectangleedge = categoryplot.getRangeAxisEdge();
        Number number = ganttcategorydataset.getEndValue(i, j);
        if(number == null)
            return;
        double d = valueaxis.valueToJava2D(number.doubleValue(), rectangle2d, rectangleedge);
        Number number1 = ganttcategorydataset.getStartValue(i, j);
        if(number1 == null)
            return;
        double d1 = valueaxis.valueToJava2D(number1.doubleValue(), rectangle2d, rectangleedge);
        if(d1 < d)
        {
            double d2 = d1;
            d1 = d;
            d = d2;
            Number number2 = number1;
            number1 = number;
            number = number2;
        }
        int k = countNonNullValues(ganttcategorydataset, j);
        if(k == 0)
            return;
        int l = countPriorNonNullValues(ganttcategorydataset, j, i);
        double d3 = (categoryaxis.getCategoryEnd(j, getColumnCount(), rectangle2d, categoryplot.getDomainAxisEdge()) - categoryaxis.getCategoryStart(j, getColumnCount(), rectangle2d, categoryplot.getDomainAxisEdge())) / (double)k;
        double d4 = categoryaxis.getCategoryStart(j, getColumnCount(), rectangle2d, categoryplot.getDomainAxisEdge()) + d3 * (double)l;
        double d5 = Math.abs(d1 - d);
        java.awt.geom.Rectangle2D.Double double1 = null;
        if(plotorientation == PlotOrientation.HORIZONTAL)
            double1 = new java.awt.geom.Rectangle2D.Double(d, d4, d5, d3);
        else
        if(plotorientation == PlotOrientation.VERTICAL)
            double1 = new java.awt.geom.Rectangle2D.Double(d4, d1, d3, d5);
        java.awt.geom.Rectangle2D.Double double2 = null;
        java.awt.geom.Rectangle2D.Double double3 = null;
        Number number3 = ganttcategorydataset.getPercentComplete(i, j);
        double d6 = getStartPercent();
        double d7 = getEndPercent();
        if(number3 != null)
        {
            double d8 = number3.doubleValue();
            if(categoryplot.getOrientation() == PlotOrientation.HORIZONTAL)
            {
                double2 = new java.awt.geom.Rectangle2D.Double(d, d4 + d6 * d3, d5 * d8, d3 * (d7 - d6));
                double3 = new java.awt.geom.Rectangle2D.Double(d + d5 * d8, d4 + d6 * d3, d5 * (1.0D - d8), d3 * (d7 - d6));
            } else
            if(categoryplot.getOrientation() == PlotOrientation.VERTICAL)
            {
                double2 = new java.awt.geom.Rectangle2D.Double(d4 + d6 * d3, d1 + d5 * (1.0D - d8), d3 * (d7 - d6), d5 * d8);
                double3 = new java.awt.geom.Rectangle2D.Double(d4 + d6 * d3, d1, d3 * (d7 - d6), d5 * (1.0D - d8));
            }
        }
        Paint paint = getItemPaint(i, j);
        graphics2d.setPaint(paint);
        graphics2d.fill(double1);
        if(double2 != null)
        {
            graphics2d.setPaint(getCompletePaint());
            graphics2d.fill(double2);
        }
        if(double3 != null)
        {
            graphics2d.setPaint(getIncompletePaint());
            graphics2d.fill(double3);
        }
        if(isDrawBarOutline() && categoryitemrendererstate.getBarWidth() > 3D)
        {
            java.awt.Stroke stroke = getItemOutlineStroke(i, j);
            Paint paint1 = getItemOutlinePaint(i, j);
            if(stroke != null && paint1 != null)
            {
                graphics2d.setStroke(stroke);
                graphics2d.setPaint(paint1);
                graphics2d.draw(double1);
            }
        }
        org.jfree.chart.labels.CategoryItemLabelGenerator categoryitemlabelgenerator = getItemLabelGenerator(i, j);
        if(categoryitemlabelgenerator != null && isItemLabelVisible(i, j))
            drawItemLabel(graphics2d, ganttcategorydataset, i, j, categoryplot, categoryitemlabelgenerator, double1, false);
        if(categoryitemrendererstate.getInfo() != null)
        {
            EntityCollection entitycollection = categoryitemrendererstate.getEntityCollection();
            if(entitycollection != null)
            {
                String s = null;
                CategoryToolTipGenerator categorytooltipgenerator = getToolTipGenerator(i, j);
                if(categorytooltipgenerator != null)
                    s = categorytooltipgenerator.generateToolTip(ganttcategorydataset, i, j);
                String s1 = null;
                if(getItemURLGenerator(i, j) != null)
                    s1 = getItemURLGenerator(i, j).generateURL(ganttcategorydataset, i, j);
                CategoryItemEntity categoryitementity = new CategoryItemEntity(double1, s, s1, ganttcategorydataset, ganttcategorydataset.getRowKey(i), ganttcategorydataset.getColumnKey(j));
                entitycollection.add(categoryitementity);
            }
        }
    }

    protected double calculateBarW0(CategoryPlot categoryplot, PlotOrientation plotorientation, Rectangle2D rectangle2d, CategoryAxis categoryaxis, CategoryItemRendererState categoryitemrendererstate, int i, int j)
    {
        double d = 0.0D;
        if(plotorientation == PlotOrientation.HORIZONTAL)
            d = rectangle2d.getHeight();
        else
            d = rectangle2d.getWidth();
        double d1 = categoryaxis.getCategoryStart(j, getColumnCount(), rectangle2d, categoryplot.getDomainAxisEdge());
        int k = getRowCount();
        int l = getColumnCount();
        if(k > 1)
        {
            double d2 = (d * getItemMargin()) / (double)(l * (k - 1));
            double d3 = calculateSeriesWidth(d, categoryaxis, l, k);
            d1 = (d1 + (double)i * (d3 + d2) + d3 / 2D) - categoryitemrendererstate.getBarWidth() / 2D;
        } else
        {
            d1 = categoryaxis.getCategoryMiddle(j, getColumnCount(), rectangle2d, categoryplot.getDomainAxisEdge()) - categoryitemrendererstate.getBarWidth() / 2D;
        }
        return d1;
    }

    private int countNonNullValues(CategoryDataset categorydataset, int i)
    {
        return countPriorNonNullValues(categorydataset, i, categorydataset.getRowCount());
    }

    private int countPriorNonNullValues(CategoryDataset categorydataset, int i, int j)
    {
        if(j == 0)
            return 0;
        int k = 0;
        for(int l = 0; l < j; l++)
            if(categorydataset.getValue(l, i) != null)
                k++;

        return k;
    }

    private static final long serialVersionUID = 0xc85860b9f6a641a8L;
    private Paint completePaint;
    private Paint incompletePaint;
    private double startPercent;
    private double endPercent;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -