📄 abstractrenderer.java
字号:
/* ===========================================================
* JFreeChart : a free chart library for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2000-2004, by Object Refinery Limited and Contributors.
*
* Project Info: http://www.jfree.org/jfreechart/index.html
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
* in the United States and other countries.]
*
* ---------------------
* AbstractRenderer.java
* ---------------------
* (C) Copyright 2002-2004, by Object Refinery Limited.
*
* Original Author: David Gilbert (for Object Refinery Limited);
* Contributor(s): Nicolas Brodu;
*
* $Id: AbstractRenderer.java,v 1.1 2004/08/31 14:45:01 mungady Exp $
*
* Changes:
* --------
* 22-Aug-2002 : Version 1, draws code out of AbstractXYItemRenderer to share with
* AbstractCategoryItemRenderer (DG);
* 01-Oct-2002 : Fixed errors reported by Checkstyle (DG);
* 06-Nov-2002 : Moved to the com.jrefinery.chart.renderer package (DG);
* 21-Nov-2002 : Added a paint table for the renderer to use (DG);
* 17-Jan-2003 : Moved plot classes into a separate package (DG);
* 25-Mar-2003 : Implemented Serializable (DG);
* 29-Apr-2003 : Added valueLabelFont and valueLabelPaint attributes, based on code from
* Arnaud Lelievre (DG);
* 29-Jul-2003 : Amended code that doesn't compile with JDK 1.2.2 (DG);
* 13-Aug-2003 : Implemented Cloneable (DG);
* 15-Sep-2003 : Fixed serialization (NB);
* 17-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
* 07-Oct-2003 : Moved PlotRenderingInfo into RendererState to allow for multiple threads
* using a single renderer (DG);
* 20-Oct-2003 : Added missing setOutlinePaint(...) method (DG);
* 23-Oct-2003 : Split item label attributes into 'positive' and 'negative' values (DG);
* 26-Nov-2003 : Added methods to get the positive and negative item label positions (DG);
* 01-Mar-2004 : Modified readObject() method to prevent null pointer exceptions after
* deserialization (DG);
* 19-Jul-2004 : Fixed bug in getItemLabelFont(int, int) method (DG);
*
*/
package org.jfree.chart.renderer;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.swing.event.EventListenerList;
import org.jfree.chart.event.RendererChangeEvent;
import org.jfree.chart.event.RendererChangeListener;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.DrawingSupplier;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.io.SerialUtilities;
import org.jfree.ui.TextAnchor;
import org.jfree.util.BooleanList;
import org.jfree.util.BooleanUtils;
import org.jfree.util.NumberUtils;
import org.jfree.util.ObjectList;
import org.jfree.util.ObjectUtils;
import org.jfree.util.PaintList;
import org.jfree.util.ShapeList;
import org.jfree.util.ShapeUtils;
import org.jfree.util.StrokeList;
/**
* Base class providing common services for renderers. Most methods that update attributes of the
* renderer will fire a {@link RendererChangeEvent}, which normally means the plot that owns
* the renderer will receive notification that the renderer has been changed (the plot will, in
* turn, notify the chart).
*/
public abstract class AbstractRenderer implements Cloneable, Serializable {
/** A useful constant. */
public static final Double ZERO = new Double(0.0);
/** The default paint. */
public static final Paint DEFAULT_PAINT = Color.blue;
/** The default outline paint. */
public static final Paint DEFAULT_OUTLINE_PAINT = Color.gray;
/** The default stroke. */
public static final Stroke DEFAULT_STROKE = new BasicStroke(1.0f);
/** The default outline stroke. */
public static final Stroke DEFAULT_OUTLINE_STROKE = new BasicStroke(1.0f);
/** The default shape. */
public static final Shape DEFAULT_SHAPE = new Rectangle2D.Double(-3.0, -3.0, 6.0, 6.0);
/** The default value label font. */
public static final Font DEFAULT_VALUE_LABEL_FONT = new Font("SansSerif", Font.PLAIN, 10);
/** The default value label paint. */
public static final Paint DEFAULT_VALUE_LABEL_PAINT = Color.black;
/** A flag that controls the visibility of ALL series. */
private Boolean seriesVisible;
/** A list of flags that controls whether or not each series is visible. */
private BooleanList seriesVisibleList;
/** The default visibility for each series. */
private boolean baseSeriesVisible;
/** The paint for ALL series (optional). */
private transient Paint paint;
/** The paint list. */
private PaintList paintList;
/** The base paint. */
private transient Paint basePaint;
/** The outline paint for ALL series (optional). */
private transient Paint outlinePaint;
/** The outline paint list. */
private PaintList outlinePaintList;
/** The base outline paint. */
private transient Paint baseOutlinePaint;
/** The stroke for ALL series (optional). */
private transient Stroke stroke;
/** The stroke list. */
private StrokeList strokeList;
/** The base stroke. */
private transient Stroke baseStroke;
/** The outline stroke for ALL series (optional). */
private transient Stroke outlineStroke;
/** The outline stroke list. */
private StrokeList outlineStrokeList;
/** The base outline stroke. */
private transient Stroke baseOutlineStroke;
/** The shape for ALL series (optional). */
private transient Shape shape;
/** A shape list. */
private ShapeList shapeList;
/** The base shape. */
private transient Shape baseShape;
/** Visibility of the item labels for ALL series (optional). */
private Boolean itemLabelsVisible;
/** Visibility of the item labels PER series. */
private BooleanList itemLabelsVisibleList;
/** The base item labels visible. */
private Boolean baseItemLabelsVisible;
/** The item label font for ALL series (optional). */
private Font itemLabelFont;
/** The item label font list (one font per series). */
private ObjectList itemLabelFontList;
/** The base item label font. */
private Font baseItemLabelFont;
/** The item label paint for ALL series. */
private transient Paint itemLabelPaint;
/** The item label paint list (one paint per series). */
private PaintList itemLabelPaintList;
/** The base item label paint. */
private transient Paint baseItemLabelPaint;
/** The positive item label position for ALL series (optional). */
private ItemLabelPosition positiveItemLabelPosition;
/** The positive item label position (per series). */
private ObjectList positiveItemLabelPositionList;
/** The fallback positive item label position. */
private ItemLabelPosition basePositiveItemLabelPosition;
/** The negative item label position for ALL series (optional). */
private ItemLabelPosition negativeItemLabelPosition;
/** The negative item label position (per series). */
private ObjectList negativeItemLabelPositionList;
/** The fallback negative item label position. */
private ItemLabelPosition baseNegativeItemLabelPosition;
/** The item label anchor offset. */
private double itemLabelAnchorOffset = 2.0;
/** Storage for registered change listeners. */
private transient EventListenerList listenerList;
/**
* Default constructor.
*/
public AbstractRenderer() {
this.seriesVisible = null;
this.seriesVisibleList = new BooleanList();
this.baseSeriesVisible = true;
this.paint = null;
this.paintList = new PaintList();
this.basePaint = DEFAULT_PAINT;
this.outlinePaint = null;
this.outlinePaintList = new PaintList();
this.baseOutlinePaint = DEFAULT_OUTLINE_PAINT;
this.stroke = null;
this.strokeList = new StrokeList();
this.baseStroke = DEFAULT_STROKE;
this.outlineStroke = null;
this.outlineStrokeList = new StrokeList();
this.baseOutlineStroke = DEFAULT_OUTLINE_STROKE;
this.shape = null;
this.shapeList = new ShapeList();
this.baseShape = DEFAULT_SHAPE;
this.itemLabelsVisible = null;
this.itemLabelsVisibleList = new BooleanList();
this.baseItemLabelsVisible = Boolean.FALSE;
this.itemLabelFont = null;
this.itemLabelFontList = new ObjectList();
this.baseItemLabelFont = new Font("SansSerif", Font.PLAIN, 10);
this.itemLabelPaint = null;
this.itemLabelPaintList = new PaintList();
this.baseItemLabelPaint = Color.black;
this.positiveItemLabelPosition = null;
this.positiveItemLabelPositionList = new ObjectList();
this.basePositiveItemLabelPosition = new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER
);
this.negativeItemLabelPosition = null;
this.negativeItemLabelPositionList = new ObjectList();
this.baseNegativeItemLabelPosition = new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE6, TextAnchor.TOP_CENTER
);
this.listenerList = new EventListenerList();
}
/**
* Returns the drawing supplier from the plot.
*
* @return The drawing supplier.
*/
public abstract DrawingSupplier getDrawingSupplier();
// SERIES VISIBLE (not yet respected by all renderers)
/**
* Returns a boolean that indicates whether or not the specified item should be drawn
* (this is typically used to hide an entire series).
*
* @param series the series index.
* @param item the item index.
*
* @return A boolean.
*/
public boolean getItemVisible(int series, int item) {
boolean result = this.baseSeriesVisible;
if (this.seriesVisible != null) {
result = this.seriesVisible.booleanValue();
}
else {
Boolean b = this.seriesVisibleList.getBoolean(series);
if (b != null) {
result = b.booleanValue();
}
}
return result;
}
/**
* Returns the flag that controls the visibility of ALL series. This flag overrides the
* per series and default settings - you must set it to <code>null</code> if you want the
* other settings to apply.
*
* @return The flag (possibly <code>null</code>).
*/
public Boolean getSeriesVisible() {
return this.seriesVisible;
}
/**
* Sets the flag that controls the visibility of ALL series and sends a
* {@link RendererChangeEvent} to all registered listeners. This flag overrides the
* per series and default settings - you must set it to <code>null</code> if you want the
* other settings to apply.
*
* @param visible the flag (<code>null</code> permitted).
*/
public void setSeriesVisible(Boolean visible) {
setSeriesVisible(visible, true);
}
/**
* Sets the flag that controls the visibility of ALL series and sends a
* {@link RendererChangeEvent} to all registered listeners. This flag overrides the
* per series and default settings - you must set it to <code>null</code> if you want the
* other settings to apply.
*
* @param visible the flag (<code>null</code> permitted).
* @param notify notify listeners?
*/
public void setSeriesVisible(Boolean visible, boolean notify) {
this.seriesVisible = visible;
if (notify) {
notifyListeners(new RendererChangeEvent(this));
}
}
/**
* Returns the flag that controls whether a series is visible.
*
* @param series the series index (zero-based).
*
* @return The flag (possibly <code>null</code>).
*/
public Boolean getSeriesVisible(int series) {
return this.seriesVisibleList.getBoolean(series);
}
/**
* Sets the flag that controls whether a series is visible and sends a
* {@link RendererChangeEvent} to all registered listeners.
*
* @param series the series index (zero-based).
* @param visible the flag (<code>null</code> permitted).
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -