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 + -
显示快捷键?