📄 axis.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.] * * --------- * Axis.java * --------- * (C) Copyright 2000-2004, by Object Refinery Limited and Contributors. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Bill Kelemen; Nicolas Brodu * * $Id: Axis.java,v 1.42 2004/06/07 10:35:27 mungady Exp $ * * Changes (from 21-Aug-2001) * -------------------------- * 21-Aug-2001 : Added standard header, fixed DOS encoding problem (DG); * 18-Sep-2001 : Updated header (DG); * 07-Nov-2001 : Allow null axis labels (DG); * : Added default font values (DG); * 13-Nov-2001 : Modified the setPlot(...) method to check compatibility between the axis and the * plot (DG); * 30-Nov-2001 : Changed default font from "Arial" --> "SansSerif" (DG); * 06-Dec-2001 : Allow null in setPlot(...) method (BK); * 06-Mar-2002 : Added AxisConstants interface (DG); * 23-Apr-2002 : Added a visible property. Moved drawVerticalString to RefineryUtilities. Added * fixedDimension property for use in combined plots (DG); * 25-Jun-2002 : Removed unnecessary imports (DG); * 05-Sep-2002 : Added attribute for tick mark paint (DG); * 18-Sep-2002 : Fixed errors reported by Checkstyle (DG); * 07-Nov-2002 : Added attributes to control the inside and outside length of the tick marks (DG); * 08-Nov-2002 : Moved to new package com.jrefinery.chart.axis (DG); * 18-Nov-2002 : Added axis location to refreshTicks(...) parameters (DG); * 15-Jan-2003 : Removed monolithic constructor (DG); * 17-Jan-2003 : Moved plot classes to separate package (DG); * 26-Mar-2003 : Implemented Serializable (DG); * 03-Jul-2003 : Modified reserveSpace method (DG); * 13-Aug-2003 : Implemented Cloneable (DG); * 11-Sep-2003 : Took care of listeners while cloning (NB); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 06-Nov-2003 : Modified refreshTicks(...) signature (DG); * 06-Jan-2004 : Added axis line attributes (DG); * 16-Mar-2004 : Added plot state to draw() method (DG); * 07-Apr-2004 : Modified text bounds calculation (DG); * 18-May-2004 : Eliminated AxisConstants.java (DG); * */package org.jfree.chart.axis;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics2D;import java.awt.Insets;import java.awt.Paint;import java.awt.Shape;import java.awt.Stroke;import java.awt.geom.AffineTransform;import java.awt.geom.Line2D;import java.awt.geom.Rectangle2D;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.List;import javax.swing.event.EventListenerList;import org.jfree.chart.event.AxisChangeEvent;import org.jfree.chart.event.AxisChangeListener;import org.jfree.chart.plot.Plot;import org.jfree.chart.plot.PlotRenderingInfo;import org.jfree.io.SerialUtilities;import org.jfree.text.TextUtilities;import org.jfree.ui.RectangleEdge;import org.jfree.ui.RefineryUtilities;import org.jfree.ui.TextAnchor;import org.jfree.util.Log;import org.jfree.util.LogContext;import org.jfree.util.ObjectUtils;/** * The base class for all axes in JFreeChart. Subclasses are divided into those that display * values ({@link ValueAxis}) and those that display categories ({@link CategoryAxis}). */public abstract class Axis implements Cloneable, Serializable { /** The default axis visibility. */ public static final boolean DEFAULT_AXIS_VISIBLE = true; /** The default axis label font. */ public static final Font DEFAULT_AXIS_LABEL_FONT = new Font("SansSerif", Font.PLAIN, 12); /** The default axis label paint. */ public static final Paint DEFAULT_AXIS_LABEL_PAINT = Color.black; /** The default axis label insets. */ public static final Insets DEFAULT_AXIS_LABEL_INSETS = new Insets(3, 3, 3, 3); /** The default axis line paint. */ public static final Paint DEFAULT_AXIS_LINE_PAINT = Color.gray; /** The default axis line stroke. */ public static final Stroke DEFAULT_AXIS_LINE_STROKE = new BasicStroke(1.0f); /** The default tick labels visibility. */ public static final boolean DEFAULT_TICK_LABELS_VISIBLE = true; /** The default tick label font. */ public static final Font DEFAULT_TICK_LABEL_FONT = new Font("SansSerif", Font.PLAIN, 10); /** The default tick label paint. */ public static final Paint DEFAULT_TICK_LABEL_PAINT = Color.black; /** The default tick label insets. */ public static final Insets DEFAULT_TICK_LABEL_INSETS = new Insets(2, 4, 2, 4); /** The default tick marks visible. */ public static final boolean DEFAULT_TICK_MARKS_VISIBLE = true; /** The default tick stroke. */ public static final Stroke DEFAULT_TICK_MARK_STROKE = new BasicStroke(1); /** The default tick paint. */ public static final Paint DEFAULT_TICK_MARK_PAINT = Color.gray; /** The default tick mark inside length. */ public static final float DEFAULT_TICK_MARK_INSIDE_LENGTH = 0.0f; /** The default tick mark outside length. */ public static final float DEFAULT_TICK_MARK_OUTSIDE_LENGTH = 2.0f; /** A flag indicating whether or not the axis is visible. */ private boolean visible; /** The label for the axis. */ private String label; /** The font for displaying the axis label. */ private Font labelFont; /** The paint for drawing the axis label. */ private transient Paint labelPaint; /** The insets for the axis label. */ private Insets labelInsets; /** The label angle. */ private double labelAngle; /** A flag that controls whether or not the axis line is visible. */ private boolean axisLineVisible; /** The stroke used for the axis line. */ private transient Stroke axisLineStroke; /** The paint used for the axis line. */ private transient Paint axisLinePaint; /** A flag that indicates whether or not tick labels are visible for the axis. */ private boolean tickLabelsVisible; /** The font used to display the tick labels. */ private Font tickLabelFont; /** The color used to display the tick labels. */ private transient Paint tickLabelPaint; /** The blank space around each tick label. */ private Insets tickLabelInsets; /** A flag that indicates whether or not tick marks are visible for the axis. */ private boolean tickMarksVisible; /** The length of the tick mark inside the data area (zero permitted). */ private float tickMarkInsideLength; /** The length of the tick mark outside the data area (zero permitted). */ private float tickMarkOutsideLength; /** The stroke used to draw tick marks. */ private transient Stroke tickMarkStroke; /** The paint used to draw tick marks. */ private transient Paint tickMarkPaint; /** The fixed (horizontal or vertical) dimension for the axis. */ private double fixedDimension; /** A reference back to the plot that the axis is assigned to (can be <code>null</code>). */ private transient Plot plot; /** Storage for registered listeners. */ private transient EventListenerList listenerList; /** Access to logging facilities. */ protected static final LogContext LOGGER = Log.createContext(Axis.class); /** * Constructs an axis, using default values where necessary. * * @param label the axis label (<code>null</code> permitted). */ protected Axis(String label) { this.label = label; this.visible = DEFAULT_AXIS_VISIBLE; this.labelFont = DEFAULT_AXIS_LABEL_FONT; this.labelPaint = DEFAULT_AXIS_LABEL_PAINT; this.labelInsets = DEFAULT_AXIS_LABEL_INSETS; this.labelAngle = 0.0; this.axisLineVisible = true; this.axisLinePaint = DEFAULT_AXIS_LINE_PAINT; this.axisLineStroke = DEFAULT_AXIS_LINE_STROKE; this.tickLabelsVisible = DEFAULT_TICK_LABELS_VISIBLE; this.tickLabelFont = DEFAULT_TICK_LABEL_FONT; this.tickLabelPaint = DEFAULT_TICK_LABEL_PAINT; this.tickLabelInsets = DEFAULT_TICK_LABEL_INSETS; this.tickMarksVisible = DEFAULT_TICK_MARKS_VISIBLE; this.tickMarkStroke = DEFAULT_TICK_MARK_STROKE; this.tickMarkPaint = DEFAULT_TICK_MARK_PAINT; this.tickMarkInsideLength = DEFAULT_TICK_MARK_INSIDE_LENGTH; this.tickMarkOutsideLength = DEFAULT_TICK_MARK_OUTSIDE_LENGTH; this.plot = null; this.listenerList = new EventListenerList(); } /** * Returns <code>true</code> if the axis is visible, and <code>false</code> otherwise. * * @return A boolean. */ public boolean isVisible() { return this.visible; } /** * Sets a flag that controls whether or not the axis is visible and sends an * {@link AxisChangeEvent} to all registered listeners. * * @param flag the flag. */ public void setVisible(boolean flag) { if (flag != this.visible) { this.visible = flag; notifyListeners(new AxisChangeEvent(this)); } } /** * Returns the label for the axis. * * @return The label for the axis (<code>null</code> possible). */ public String getLabel() { return this.label; } /** * Sets the label for the axis and sends an {@link AxisChangeEvent} to all registered * listeners. * * @param label the new label (<code>null</code> permitted). */ public void setLabel(String label) { String existing = this.label; if (existing != null) { if (!existing.equals(label)) { this.label = label; notifyListeners(new AxisChangeEvent(this)); } } else { if (label != null) { this.label = label; notifyListeners(new AxisChangeEvent(this)); } } } /** * Returns the font for the axis label. * * @return The font. */ public Font getLabelFont() { return this.labelFont; } /** * Sets the font for the axis label and sends an {@link AxisChangeEvent} to all * registered listeners. * * @param font the font (<code>null</code> not permitted). */ public void setLabelFont(Font font) { if (font == null) { throw new IllegalArgumentException("Null 'font' argument."); } if (!this.labelFont.equals(font)) { this.labelFont = font; notifyListeners(new AxisChangeEvent(this)); } } /** * Returns the color/shade used to draw the axis label. * * @return The paint (never <code>null</code>). */ public Paint getLabelPaint() { return this.labelPaint; } /** * Sets the paint used to draw the axis label and sends an {@link AxisChangeEvent} * to all registered listeners. * * @param paint the paint (<code>null</code> not permitted). */ public void setLabelPaint(Paint paint) { if (paint == null) { throw new IllegalArgumentException("Axis.setLabelPaint(...): null not permitted."); } this.labelPaint = paint; notifyListeners(new AxisChangeEvent(this)); } /** * Returns the insets for the label (that is, the amount of blank space * that should be left around the label). * * @return The label insets (never <code>null</code>). */ public Insets getLabelInsets() { return this.labelInsets; } /** * Sets the insets for the axis label, and sends an {@link AxisChangeEvent} to all * registered listeners. * * @param insets the insets (<code>null</code> not permitted). */ public void setLabelInsets(Insets insets) { if (insets == null) { throw new IllegalArgumentException("Null 'insets' argument."); } if (!insets.equals(this.labelInsets)) { this.labelInsets = insets; notifyListeners(new AxisChangeEvent(this)); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -