xybarrenderer.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 669 行 · 第 1/2 页

JAVA
669
字号
        this.legendBar = bar;        notifyListeners(new RendererChangeEvent(this));    }        /**     * Initialises the renderer and returns a state object that should be      * passed to all subsequent calls to the drawItem() method.  Here we      * calculate the Java2D y-coordinate for zero, since all the bars have      * their bases fixed at zero.     *     * @param g2  the graphics device.     * @param dataArea  the area inside the axes.     * @param plot  the plot.     * @param dataset  the data.     * @param info  an optional info collection object to return data back to      *              the caller.     *     * @return A state object.     */    public XYItemRendererState initialise(Graphics2D g2,                                          Rectangle2D dataArea,                                          XYPlot plot,                                          XYDataset dataset,                                          PlotRenderingInfo info) {        XYBarRendererState state = new XYBarRendererState(info);        ValueAxis rangeAxis             = plot.getRangeAxisForDataset(plot.indexOf(dataset));        state.setG2Base(            rangeAxis.valueToJava2D(                this.base, dataArea, plot.getRangeAxisEdge()            )        );        return state;    }    /**     * Returns a default legend item for the specified series.  Subclasses      * should override this method to generate customised items.     *     * @param datasetIndex  the dataset index (zero-based).     * @param series  the series index (zero-based).     *     * @return A legend item for the series.     */    public LegendItem getLegendItem(int datasetIndex, int series) {        LegendItem result = null;        XYPlot xyplot = getPlot();        if (xyplot != null) {            XYDataset dataset = xyplot.getDataset(datasetIndex);            if (dataset != null) {                XYSeriesLabelGenerator lg = getLegendItemLabelGenerator();                String label = lg.generateLabel(dataset, series);                String description = label;                String toolTipText = null;                if (getLegendItemToolTipGenerator() != null) {                    toolTipText = getLegendItemToolTipGenerator().generateLabel(                        dataset, series                    );                }                String urlText = null;                if (getLegendItemURLGenerator() != null) {                    urlText = getLegendItemURLGenerator().generateLabel(                        dataset, series                    );                }                Shape shape = this.legendBar;                Paint paint = getSeriesPaint(series);                Paint outlinePaint = getSeriesOutlinePaint(series);                Stroke outlineStroke = getSeriesOutlineStroke(series);                result = new LegendItem(                    label, description, toolTipText, urlText,                     shape, paint, outlineStroke, outlinePaint                );            }        }        return result;    }        /**     * Draws the visual representation of a single data item.     *     * @param g2  the graphics device.     * @param state  the renderer state.     * @param dataArea  the area within which the plot is being drawn.     * @param info  collects information about the drawing.     * @param plot  the plot (can be used to obtain standard color      *              information etc).     * @param domainAxis  the domain axis.     * @param rangeAxis  the range axis.     * @param dataset  the dataset.     * @param series  the series index (zero-based).     * @param item  the item index (zero-based).     * @param crosshairState  crosshair information for the plot      *                        (<code>null</code> permitted).     * @param pass  the pass index.     */    public void drawItem(Graphics2D g2,                         XYItemRendererState state,                         Rectangle2D dataArea,                         PlotRenderingInfo info,                         XYPlot plot,                         ValueAxis domainAxis,                         ValueAxis rangeAxis,                         XYDataset dataset,                         int series,                         int item,                         CrosshairState crosshairState,                         int pass) {        if (!getItemVisible(series, item)) {            return;           }        IntervalXYDataset intervalDataset = (IntervalXYDataset) dataset;        double value0;        double value1;        if (this.useYInterval) {            value0 = intervalDataset.getStartYValue(series, item);            value1 = intervalDataset.getEndYValue(series, item);        }        else {            value0 = this.base;            value1 = intervalDataset.getYValue(series, item);        }        if (Double.isNaN(value0) || Double.isNaN(value1)) {            return;        }        double translatedValue0 = rangeAxis.valueToJava2D(            value0, dataArea, plot.getRangeAxisEdge()        );        double translatedValue1 = rangeAxis.valueToJava2D(            value1, dataArea, plot.getRangeAxisEdge()        );        RectangleEdge location = plot.getDomainAxisEdge();        Number startXNumber = intervalDataset.getStartX(series, item);        if (startXNumber == null) {            return;        }        double translatedStartX = domainAxis.valueToJava2D(            startXNumber.doubleValue(), dataArea, location        );        Number endXNumber = intervalDataset.getEndX(series, item);        if (endXNumber == null) {            return;        }        double translatedEndX = domainAxis.valueToJava2D(            endXNumber.doubleValue(), dataArea, location        );        double translatedWidth = Math.max(            1, Math.abs(translatedEndX - translatedStartX)        );        double translatedHeight = Math.abs(translatedValue1 - translatedValue0);        if (getMargin() > 0.0) {            double cut = translatedWidth * getMargin();            translatedWidth = translatedWidth - cut;            translatedStartX = translatedStartX + cut / 2;        }        Rectangle2D bar = null;        PlotOrientation orientation = plot.getOrientation();        if (orientation == PlotOrientation.HORIZONTAL) {            bar = new Rectangle2D.Double(                Math.min(translatedValue0, translatedValue1), translatedEndX,                translatedHeight, translatedWidth            );        }        else if (orientation == PlotOrientation.VERTICAL) {            bar = new Rectangle2D.Double(                translatedStartX, Math.min(translatedValue0, translatedValue1),                 translatedWidth, translatedHeight            );        }        Paint itemPaint = getItemPaint(series, item);        if (getGradientPaintTransformer()                 != null && itemPaint instanceof GradientPaint) {            GradientPaint gp = (GradientPaint) itemPaint;            itemPaint = getGradientPaintTransformer().transform(gp, bar);        }        g2.setPaint(itemPaint);        g2.fill(bar);        if (isDrawBarOutline()                 && Math.abs(translatedEndX - translatedStartX) > 3) {            Stroke stroke = getItemOutlineStroke(series, item);            Paint paint = getItemOutlinePaint(series, item);            if (stroke != null && paint != null) {                g2.setStroke(stroke);                g2.setPaint(paint);                g2.draw(bar);                            }        }                // TODO: we need something better for the item labels        if (isItemLabelVisible(series, item)) {            drawItemLabel(                g2, orientation, dataset, series, item, bar.getCenterX(),                 bar.getY(), value1 < 0.0            );        }        // add an entity for the item...        if (info != null) {            EntityCollection entities = info.getOwner().getEntityCollection();            if (entities != null) {                String tip = null;                XYToolTipGenerator generator                     = getToolTipGenerator(series, item);                if (generator != null) {                    tip = generator.generateToolTip(dataset, series, item);                }                String url = null;                if (getURLGenerator() != null) {                    url = getURLGenerator().generateURL(dataset, series, item);                }                XYItemEntity entity = new XYItemEntity(                    bar, dataset, series, item, tip, url                );                entities.add(entity);            }        }    }    /**     * Returns the lower and upper bounds (range) of the x-values in the      * specified dataset.  Since this renderer uses the x-interval in the      * dataset, this is taken into account for the range.     *      * @param dataset  the dataset (<code>null</code> permitted).     *      * @return The range (<code>null</code> if the dataset is      *         <code>null</code> or empty).     */    public Range findDomainBounds(XYDataset dataset) {        if (dataset != null) {            return DatasetUtilities.findDomainBounds(dataset, true);        }        else {            return null;        }    }    /**     * Returns a clone of the renderer.     *     * @return A clone.     *     * @throws CloneNotSupportedException  if the renderer cannot be cloned.     */    public Object clone() throws CloneNotSupportedException {        XYBarRenderer result = (XYBarRenderer) super.clone();        if (this.gradientPaintTransformer != null) {            result.gradientPaintTransformer = (GradientPaintTransformer)                ObjectUtilities.clone(this.gradientPaintTransformer);        }        return result;    }    /**     * Tests this renderer for equality with an arbitrary object.     *      * @param obj  the object to test against (<code>null</code> permitted).     *      * @return A boolean.     */    public boolean equals(Object obj) {        if (obj == this) {            return true;        }        if (!(obj instanceof XYBarRenderer)) {            return false;        }        if (!super.equals(obj)) {            return false;        }        XYBarRenderer that = (XYBarRenderer) obj;        if (this.base != that.base) {            return false;        }        if (this.drawBarOutline != that.drawBarOutline) {            return false;        }        if (this.margin != that.margin) {            return false;        }        if (this.useYInterval != that.useYInterval) {            return false;        }        if (!ObjectUtilities.equal(            this.gradientPaintTransformer, that.gradientPaintTransformer)        ) {            return false;        }        if (!ShapeUtilities.equal(this.legendBar, that.legendBar)) {            return false;           }        return true;    }        /**     * Provides serialization support.     *     * @param stream  the input stream.     *     * @throws IOException  if there is an I/O error.     * @throws ClassNotFoundException  if there is a classpath problem.     */    private void readObject(ObjectInputStream stream)             throws IOException, ClassNotFoundException {        stream.defaultReadObject();        this.legendBar = SerialUtilities.readShape(stream);    }        /**     * Provides serialization support.     *     * @param stream  the output stream.     *     * @throws IOException  if there is an I/O error.     */    private void writeObject(ObjectOutputStream stream) throws IOException {        stream.defaultWriteObject();        SerialUtilities.writeShape(this.legendBar, stream);    }}

⌨️ 快捷键说明

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