barrenderer.java

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

JAVA
1,014
字号
            if (stroke != null && paint != null) {                g2.setStroke(stroke);                g2.setPaint(paint);                g2.draw(bar);            }        }        CategoryItemLabelGenerator generator             = getItemLabelGenerator(row, column);        if (generator != null && isItemLabelVisible(row, column)) {            drawItemLabel(                g2, dataset, row, column, plot, generator, bar, (value < 0.0)            );        }                                // collect entity and tool tip information...        if (state.getInfo() != null) {            EntityCollection entities                 = state.getInfo().getOwner().getEntityCollection();            if (entities != null) {                String tip = null;                CategoryToolTipGenerator tipster                     = getToolTipGenerator(row, column);                if (tipster != null) {                    tip = tipster.generateToolTip(dataset, row, column);                }                String url = null;                if (getItemURLGenerator(row, column) != null) {                    url = getItemURLGenerator(row, column).generateURL(                        dataset, row, column                    );                }                CategoryItemEntity entity = new CategoryItemEntity(                    bar, tip, url, dataset, row,                     dataset.getColumnKey(column), column                );                entities.add(entity);            }        }    }    /**     * Calculates the available space for each series.     *      * @param space  the space along the entire axis (in Java2D units).     * @param axis  the category axis.     * @param categories  the number of categories.     * @param series  the number of series.     *      * @return The width of one series.     */    protected double calculateSeriesWidth(double space, CategoryAxis axis,                                           int categories, int series) {        double factor = 1.0 - getItemMargin() - axis.getLowerMargin()                             - axis.getUpperMargin();        if (categories > 1) {            factor = factor - axis.getCategoryMargin();        }        return (space * factor) / (categories * series);    }        /**     * Draws an item label.  This method is overridden so that the bar can be      * used to calculate the label anchor point.     *      * @param g2  the graphics device.     * @param data  the dataset.     * @param row  the row.     * @param column  the column.     * @param plot  the plot.     * @param generator  the label generator.     * @param bar  the bar.     * @param negative  a flag indicating a negative value.     */    protected void drawItemLabel(Graphics2D g2,                                 CategoryDataset data,                                 int row,                                 int column,                                 CategoryPlot plot,                                 CategoryItemLabelGenerator generator,                                 Rectangle2D bar,                                 boolean negative) {                                             String label = generator.generateLabel(data, row, column);        if (label == null) {            return;  // nothing to do           }                Font labelFont = getItemLabelFont(row, column);        g2.setFont(labelFont);        Paint paint = getItemLabelPaint(row, column);        g2.setPaint(paint);        // find out where to place the label...        ItemLabelPosition position = null;        if (!negative) {            position = getPositiveItemLabelPosition(row, column);        }        else {            position = getNegativeItemLabelPosition(row, column);        }        // work out the label anchor point...        Point2D anchorPoint = calculateLabelAnchorPoint(            position.getItemLabelAnchor(), bar, plot.getOrientation()        );                if (isInternalAnchor(position.getItemLabelAnchor())) {            Shape bounds = TextUtilities.calculateRotatedStringBounds(                label, g2,                (float) anchorPoint.getX(),                (float) anchorPoint.getY(),                position.getTextAnchor(),                 position.getAngle(),                position.getRotationAnchor()            );                        if (bounds != null) {                if (!bar.contains(bounds.getBounds2D())) {                    if (!negative) {                        position = getPositiveItemLabelPositionFallback();                    }                    else {                        position = getNegativeItemLabelPositionFallback();                    }                    if (position != null) {                        anchorPoint = calculateLabelAnchorPoint(                            position.getItemLabelAnchor(), bar,                             plot.getOrientation()                        );                    }                }            }                }                if (position != null) {            TextUtilities.drawRotatedString(                label, g2, (float) anchorPoint.getX(),                 (float) anchorPoint.getY(),                position.getTextAnchor(), position.getAngle(),                 position.getRotationAnchor()            );        }            }        /**     * Calculates the item label anchor point.     *     * @param anchor  the anchor.     * @param bar  the bar.     * @param orientation  the plot orientation.     *     * @return The anchor point.     */    private Point2D calculateLabelAnchorPoint(ItemLabelAnchor anchor,                                              Rectangle2D bar,                                               PlotOrientation orientation) {        Point2D result = null;        double offset = getItemLabelAnchorOffset();        double x0 = bar.getX() - offset;        double x1 = bar.getX();        double x2 = bar.getX() + offset;        double x3 = bar.getCenterX();        double x4 = bar.getMaxX() - offset;        double x5 = bar.getMaxX();        double x6 = bar.getMaxX() + offset;        double y0 = bar.getMaxY() + offset;        double y1 = bar.getMaxY();        double y2 = bar.getMaxY() - offset;        double y3 = bar.getCenterY();        double y4 = bar.getMinY() + offset;        double y5 = bar.getMinY();        double y6 = bar.getMinY() - offset;        if (anchor == ItemLabelAnchor.CENTER) {            result = new Point2D.Double(x3, y3);        }        else if (anchor == ItemLabelAnchor.INSIDE1) {            result = new Point2D.Double(x4, y4);        }        else if (anchor == ItemLabelAnchor.INSIDE2) {            result = new Point2D.Double(x4, y4);        }        else if (anchor == ItemLabelAnchor.INSIDE3) {            result = new Point2D.Double(x4, y3);        }        else if (anchor == ItemLabelAnchor.INSIDE4) {            result = new Point2D.Double(x4, y2);        }        else if (anchor == ItemLabelAnchor.INSIDE5) {            result = new Point2D.Double(x4, y2);        }        else if (anchor == ItemLabelAnchor.INSIDE6) {            result = new Point2D.Double(x3, y2);        }        else if (anchor == ItemLabelAnchor.INSIDE7) {            result = new Point2D.Double(x2, y2);        }        else if (anchor == ItemLabelAnchor.INSIDE8) {            result = new Point2D.Double(x2, y2);        }        else if (anchor == ItemLabelAnchor.INSIDE9) {            result = new Point2D.Double(x2, y3);        }        else if (anchor == ItemLabelAnchor.INSIDE10) {            result = new Point2D.Double(x2, y4);        }        else if (anchor == ItemLabelAnchor.INSIDE11) {            result = new Point2D.Double(x2, y4);        }        else if (anchor == ItemLabelAnchor.INSIDE12) {            result = new Point2D.Double(x3, y4);        }        else if (anchor == ItemLabelAnchor.OUTSIDE1) {            result = new Point2D.Double(x5, y6);        }        else if (anchor == ItemLabelAnchor.OUTSIDE2) {            result = new Point2D.Double(x6, y5);        }        else if (anchor == ItemLabelAnchor.OUTSIDE3) {            result = new Point2D.Double(x6, y3);        }        else if (anchor == ItemLabelAnchor.OUTSIDE4) {            result = new Point2D.Double(x6, y1);        }        else if (anchor == ItemLabelAnchor.OUTSIDE5) {            result = new Point2D.Double(x5, y0);        }        else if (anchor == ItemLabelAnchor.OUTSIDE6) {            result = new Point2D.Double(x3, y0);        }        else if (anchor == ItemLabelAnchor.OUTSIDE7) {            result = new Point2D.Double(x1, y0);        }        else if (anchor == ItemLabelAnchor.OUTSIDE8) {            result = new Point2D.Double(x0, y1);        }        else if (anchor == ItemLabelAnchor.OUTSIDE9) {            result = new Point2D.Double(x0, y3);        }        else if (anchor == ItemLabelAnchor.OUTSIDE10) {            result = new Point2D.Double(x0, y5);        }        else if (anchor == ItemLabelAnchor.OUTSIDE11) {            result = new Point2D.Double(x1, y6);        }        else if (anchor == ItemLabelAnchor.OUTSIDE12) {            result = new Point2D.Double(x3, y6);        }        return result;    }        /**     * Returns <code>true</code> if the specified anchor point is inside a bar.     *      * @param anchor  the anchor point.     *      * @return A boolean.     */    private boolean isInternalAnchor(ItemLabelAnchor anchor) {        return anchor == ItemLabelAnchor.CENTER                || anchor == ItemLabelAnchor.INSIDE1               || anchor == ItemLabelAnchor.INSIDE2               || anchor == ItemLabelAnchor.INSIDE3               || anchor == ItemLabelAnchor.INSIDE4               || anchor == ItemLabelAnchor.INSIDE5               || anchor == ItemLabelAnchor.INSIDE6               || anchor == ItemLabelAnchor.INSIDE7               || anchor == ItemLabelAnchor.INSIDE8               || anchor == ItemLabelAnchor.INSIDE9               || anchor == ItemLabelAnchor.INSIDE10               || anchor == ItemLabelAnchor.INSIDE11               || anchor == ItemLabelAnchor.INSIDE12;      }        /**     * Tests this instance for equality with an arbitrary object.     *      * @param obj  the object (<code>null</code> permitted).     *      * @return A boolean.     */    public boolean equals(Object obj) {                if (obj == this) {            return true;        }        if (!(obj instanceof BarRenderer)) {            return false;        }        if (!super.equals(obj)) {            return false;        }        BarRenderer that = (BarRenderer) obj;        if (this.base != that.base) {            return false;           }        if (this.itemMargin != that.itemMargin) {            return false;        }                      if (this.drawBarOutline != that.drawBarOutline) {            return false;        }        if (this.maxBarWidth != that.maxBarWidth) {            return false;        }        if (this.minimumBarLength != that.minimumBarLength) {            return false;        }        if (!ObjectUtilities.equal(this.gradientPaintTransformer,                 that.gradientPaintTransformer)) {            return false;        }        if (!ObjectUtilities.equal(            this.positiveItemLabelPositionFallback,             that.positiveItemLabelPositionFallback        )) {            return false;        }        if (!ObjectUtilities.equal(            this.negativeItemLabelPositionFallback,             that.negativeItemLabelPositionFallback        )) {            return false;        }                return true;            }}

⌨️ 快捷键说明

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