abstractxyitemrenderer.java

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

JAVA
1,452
字号
        double x1 = axis.valueToJava2D(            start, dataArea, plot.getDomainAxisEdge()        );        double x2 = axis.valueToJava2D(            end, dataArea, plot.getDomainAxisEdge()        );        // TODO: need to change the next line to take account of plot         //       orientation...        Rectangle2D band = new Rectangle2D.Double(            x1, dataArea.getMinY(),             x2 - x1, dataArea.getMaxY() - dataArea.getMinY()        );        Paint paint = plot.getDomainTickBandPaint();        if (paint != null) {            g2.setPaint(paint);            g2.fill(band);        }    }    /**     * Fills a band between two values on the range axis.  This can be used to      * color bands between the grid lines.     *     * @param g2  the graphics device.     * @param plot  the plot.     * @param axis  the range axis.     * @param dataArea  the data area.     * @param start  the start value.     * @param end  the end value.     */    public void fillRangeGridBand(Graphics2D g2,                                  XYPlot plot,                                  ValueAxis axis,                                  Rectangle2D dataArea,                                  double start, double end) {        double y1 = axis.valueToJava2D(            start, dataArea, plot.getRangeAxisEdge()        );        double y2 = axis.valueToJava2D(end, dataArea, plot.getRangeAxisEdge());        // TODO: need to change the next line to take account of the plot         //       orientation        Rectangle2D band = new Rectangle2D.Double(            dataArea.getMinX(), y2, dataArea.getWidth(), y1 - y2        );        Paint paint = plot.getRangeTickBandPaint();        if (paint != null) {            g2.setPaint(paint);            g2.fill(band);        }    }    /**     * Draws a grid line against the range axis.     *     * @param g2  the graphics device.     * @param plot  the plot.     * @param axis  the value axis.     * @param dataArea  the area for plotting data (not yet adjusted for any      *                  3D effect).     * @param value  the value at which the grid line should be drawn.     */    public void drawDomainGridLine(Graphics2D g2,                                   XYPlot plot,                                   ValueAxis axis,                                   Rectangle2D dataArea,                                   double value) {        Range range = axis.getRange();        if (!range.contains(value)) {            return;        }        PlotOrientation orientation = plot.getOrientation();        double v = axis.valueToJava2D(            value, dataArea, plot.getDomainAxisEdge()        );        Line2D line = null;        if (orientation == PlotOrientation.HORIZONTAL) {            line = new Line2D.Double(                dataArea.getMinX(), v, dataArea.getMaxX(), v            );        }        else if (orientation == PlotOrientation.VERTICAL) {            line = new Line2D.Double(                v, dataArea.getMinY(), v, dataArea.getMaxY()            );        }        Paint paint = plot.getDomainGridlinePaint();        Stroke stroke = plot.getDomainGridlineStroke();        g2.setPaint(paint != null ? paint : Plot.DEFAULT_OUTLINE_PAINT);        g2.setStroke(stroke != null ? stroke : Plot.DEFAULT_OUTLINE_STROKE);        g2.draw(line);    }    /**     * Draws a line perpendicular to the range axis.     *     * @param g2  the graphics device.     * @param plot  the plot.     * @param axis  the value axis.     * @param dataArea  the area for plotting data (not yet adjusted for any 3D     *                  effect).     * @param value  the value at which the grid line should be drawn.     * @param paint  the paint.     * @param stroke  the stroke.     */    public void drawRangeLine(Graphics2D g2,                              XYPlot plot,                              ValueAxis axis,                              Rectangle2D dataArea,                              double value,                              Paint paint,                              Stroke stroke) {        Range range = axis.getRange();        if (!range.contains(value)) {            return;        }        PlotOrientation orientation = plot.getOrientation();        Line2D line = null;        double v = axis.valueToJava2D(value, dataArea, plot.getRangeAxisEdge());        if (orientation == PlotOrientation.HORIZONTAL) {            line = new Line2D.Double(                v, dataArea.getMinY(), v, dataArea.getMaxY()            );        }        else if (orientation == PlotOrientation.VERTICAL) {            line = new Line2D.Double(                dataArea.getMinX(), v, dataArea.getMaxX(), v            );        }                g2.setPaint(paint);        g2.setStroke(stroke);        g2.draw(line);    }    /**     * Draws a vertical line on the chart to represent a 'range marker'.     *     * @param g2  the graphics device.     * @param plot  the plot.     * @param domainAxis  the domain axis.     * @param marker  the marker line.     * @param dataArea  the axis data area.     */    public void drawDomainMarker(Graphics2D g2,                                 XYPlot plot,                                 ValueAxis domainAxis,                                 Marker marker,                                 Rectangle2D dataArea) {        if (marker instanceof ValueMarker) {            ValueMarker vm = (ValueMarker) marker;            double value = vm.getValue();            Range range = domainAxis.getRange();            if (!range.contains(value)) {                return;            }            double v = domainAxis.valueToJava2D(                value, dataArea, plot.getDomainAxisEdge()            );            PlotOrientation orientation = plot.getOrientation();            Line2D line = null;            if (orientation == PlotOrientation.HORIZONTAL) {                line = new Line2D.Double(                    dataArea.getMinX(), v, dataArea.getMaxX(), v                );            }            else if (orientation == PlotOrientation.VERTICAL) {                line = new Line2D.Double(                    v, dataArea.getMinY(), v, dataArea.getMaxY()                );            }            g2.setPaint(marker.getPaint());            g2.setStroke(marker.getStroke());            g2.draw(line);            String label = marker.getLabel();            RectangleAnchor anchor = marker.getLabelAnchor();            if (label != null) {                Font labelFont = marker.getLabelFont();                g2.setFont(labelFont);                g2.setPaint(marker.getLabelPaint());                Point2D coordinates = calculateDomainMarkerTextAnchorPoint(                    g2, orientation, dataArea, line.getBounds2D(),                     marker.getLabelOffset(),                     LengthAdjustmentType.EXPAND, anchor                );                TextUtilities.drawAlignedString(                    label, g2,                     (float) coordinates.getX(), (float) coordinates.getY(),                     marker.getLabelTextAnchor()                );            }        }        else if (marker instanceof IntervalMarker) {            IntervalMarker im = (IntervalMarker) marker;            double start = im.getStartValue();            double end = im.getEndValue();            Range range = domainAxis.getRange();            if (!(range.intersects(start, end))) {                return;            }            // don't draw beyond the axis range...            start = range.constrain(start);            end = range.constrain(end);            double v0 = domainAxis.valueToJava2D(                start, dataArea, plot.getDomainAxisEdge()            );            double v1 = domainAxis.valueToJava2D(                end, dataArea, plot.getDomainAxisEdge()            );            PlotOrientation orientation = plot.getOrientation();            Rectangle2D rect = null;            if (orientation == PlotOrientation.HORIZONTAL) {                rect = new Rectangle2D.Double(                    dataArea.getMinX(), Math.min(v0, v1),                     dataArea.getWidth(), Math.abs(v1 - v0)                );            }            else if (orientation == PlotOrientation.VERTICAL) {                rect = new Rectangle2D.Double(                    Math.min(v0, v1), dataArea.getMinY(),                     Math.abs(v1 - v0), dataArea.getHeight()                );            }            Paint p = marker.getPaint();            if (p instanceof GradientPaint) {                GradientPaint gp = (GradientPaint) p;                GradientPaintTransformer t = im.getGradientPaintTransformer();                if (t != null) {                    gp = t.transform(gp, rect);                  }                g2.setPaint(gp);            }            else {                g2.setPaint(p);            }            g2.fill(rect);            String label = marker.getLabel();            RectangleAnchor anchor = marker.getLabelAnchor();            if (label != null) {                Font labelFont = marker.getLabelFont();                g2.setFont(labelFont);                g2.setPaint(marker.getLabelPaint());                Point2D coordinates = calculateDomainMarkerTextAnchorPoint(                    g2, orientation, dataArea, rect, marker.getLabelOffset(),                     marker.getLabelOffsetType(), anchor                );                TextUtilities.drawAlignedString(                    label, g2, (float) coordinates.getX(),                     (float) coordinates.getY(),                     marker.getLabelTextAnchor()                );            }        }    }    /**     * Calculates the (x, y) coordinates for drawing a marker label.     *     * @param g2  the graphics device.     * @param orientation  the plot orientation.     * @param dataArea  the data area.     * @param markerArea  the rectangle surrounding the marker area.     * @param markerOffset  the marker label offset.     * @param labelOffsetType  the label offset type.     * @param anchor  the label anchor.     *     * @return The coordinates for drawing the marker label.     */    protected Point2D calculateDomainMarkerTextAnchorPoint(Graphics2D g2,            PlotOrientation orientation,            Rectangle2D dataArea,            Rectangle2D markerArea,            RectangleInsets markerOffset,            LengthAdjustmentType labelOffsetType,            RectangleAnchor anchor) {        Rectangle2D anchorRect = null;        if (orientation == PlotOrientation.HORIZONTAL) {            anchorRect = markerOffset.createAdjustedRectangle(                markerArea, LengthAdjustmentType.CONTRACT, labelOffsetType            );        }        else if (orientation == PlotOrientation.VERTICAL) {            anchorRect = markerOffset.createAdjustedRectangle(                markerArea, labelOffsetType, LengthAdjustmentType.CONTRACT            );        }        return RectangleAnchor.coordinates(anchorRect, anchor);    }    /**     * Draws a horizontal line across the chart to represent a 'range marker'.     *     * @param g2  the graphics device.     * @param plot  the plot.     * @param rangeAxis  the range axis.     * @param marker  the marker line.     * @param dataArea  the axis data area.     */    public void drawRangeMarker(Graphics2D g2,                                XYPlot plot,                                ValueAxis rangeAxis,                                Marker marker,                                Rectangle2D dataArea) {        if (marker instanceof ValueMarker) {            ValueMarker vm = (ValueMarker) marker;            double value = vm.getValue();            Range range = rangeAxis.getRange();            if (!range.contains(value)) {                return;            }            double v = rangeAxis.valueToJava2D(                value, dataArea, plot.getRangeAxisEdge()            );            PlotOrientation orientation = plot.getOrientation();            Line2D line = null;            if (orientation == PlotOrientation.HORIZONTAL) {                line = new Line2D.Double(                    v, dataArea.getMinY(), v, dataArea.getMaxY()                );            }            else if (orientation == PlotOrientation.VERTICAL) {                line = new Line2D.Double(                    dataArea.getMinX(), v, dataArea.getMaxX(), v                );            }            g2.setPaint(marker.getPaint());            g2.setStroke(marker.getStroke());            g2.draw(line);            String label = marker.getLabel();            RectangleAnchor anchor = marker.getLabelAnchor();            if (label != null) {                Font labelFont = marker.getLabelFont();                g2.setFont(labelFont);                g2.setPaint(marker.getLabelPaint());

⌨️ 快捷键说明

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