⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thermometerplot.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* =========================================================== * 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.] * * -------------------- * ThermometerPlot.java * -------------------- * * (C) Copyright 2000-2004, by Bryan Scott and Contributors. * * Original Author:  Bryan Scott (based on MeterPlot by Hari). * Contributor(s):   David Gilbert (for Object Refinery Limited). *                   Arnaud Lelievre; * * Changes * ------- * 11-Apr-2002 : Version 1, contributed by Bryan Scott; * 15-Apr-2002 : Changed to implement VerticalValuePlot; * 29-Apr-2002 : Added getVerticalValueAxis() method (DG); * 25-Jun-2002 : Removed redundant imports (DG); * 17-Sep-2002 : Reviewed with Checkstyle utility (DG); * 18-Sep-2002 : Extensive changes made to API, to iron out bugs and inconsistencies (DG); * 13-Oct-2002 : Corrected error datasetChanged which would generate exceptions when value set *               to null (BRS). * 23-Jan-2003 : Removed one constructor (DG); * 26-Mar-2003 : Implemented Serializable (DG); * 02-Jun-2003 : Removed test for compatible range axis (DG); * 01-Jul-2003 : Added additional check in draw method to ensure value not null (BRS); * 08-Sep-2003 : Added internationalization via use of properties resourceBundle (RFE 690236) (AL);# * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG); * 29-Sep-2003 : Updated draw to set value of cursor to non-zero and allow painting of axis. *               An incomplete fix and needs to be set for left or right drawing (BRS); * 19-Nov-2003 : Added support for value labels to be displayed left of the thermometer * 19-Nov-2003 : Improved axis drawing (now default axis does not draw axis line *               and is closer to the bulb).  Added support for the positioning *               of the axis to the left or right of the bulb. (BRS); * 03-Dec-2003 : Directly mapped deprecated setData()/getData() method to get/setDataset() (TM); * 21-Jan-2004 : Update for renamed method in ValueAxis (DG); * 07-Apr-2004 : Changed string width calculation (DG); *  */package org.jfree.chart.plot;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.Stroke;import java.awt.geom.Area;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.awt.geom.Rectangle2D;import java.awt.geom.RoundRectangle2D;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.List;import java.util.ResourceBundle;import org.jfree.chart.LegendItemCollection;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.event.PlotChangeEvent;import org.jfree.data.DatasetChangeEvent;import org.jfree.data.DefaultValueDataset;import org.jfree.data.Range;import org.jfree.data.ValueDataset;import org.jfree.io.SerialUtilities;import org.jfree.ui.RectangleEdge;import org.jfree.ui.Spacer;import org.jfree.util.ObjectUtils;/** * A plot that displays a single value (from a {@link ValueDataset}) in a thermometer type display. * <p> * This plot supports a number of options: * <ol> * <li>three sub-ranges which could be viewed as 'Normal', 'Warning' and 'Critical' ranges.</li> * <li>the thermometer can be run in two modes: *      <ul> *      <li>fixed range, or</li> *      <li>range adjusts to current sub-range.</li> *      </ul> * </li> * <li>settable units to be displayed.</li> * <li>settable display location for the value text.</li> * </ol> * * @author Bryan Scott */public class ThermometerPlot    extends Plot    implements ValueAxisPlot,    Cloneable,    Serializable {  /** A constant for unit type 'None'. */  public static final int UNITS_NONE = 0;  /** A constant for unit type 'Fahrenheit'. */  public static final int UNITS_FAHRENHEIT = 1;  /** A constant for unit type 'Celcius'. */  public static final int UNITS_CELCIUS = 2;  /** A constant for unit type 'Kelvin'. */  public static final int UNITS_KELVIN = 3;  /** A constant for the value label position (no label). */  public static final int NONE = 0;  /** A constant for the value label position (right of the thermometer). */  public static final int RIGHT = 1;  /** A constant for the value label position (left of the thermometer). */  public static final int LEFT = 2;  /** A constant for the value label position (in the thermometer bulb). */  public static final int BULB = 3;  /** A constant for the 'normal' range. */  public static final int NORMAL = 0;  /** A constant for the 'warning' range. */  public static final int WARNING = 1;  /** A constant for the 'critical' range. */  public static final int CRITICAL = 2;  /** The bulb radius. */  protected static final int BULB_RADIUS = 40;  /** The bulb diameter. */  protected static final int BULB_DIAMETER = BULB_RADIUS * 2;  /** The column radius. */  protected static final int COLUMN_RADIUS = 20;  /** The column diameter.*/  protected static final int COLUMN_DIAMETER = COLUMN_RADIUS * 2;  /** The gap radius. */  protected static final int GAP_RADIUS = 5;  /** The gap diameter. */  protected static final int GAP_DIAMETER = GAP_RADIUS * 2;  /** The axis gap. */  protected static final int AXIS_GAP = 10;  /** The unit strings. */  protected static final String[] UNITS = {      "", "\u00B0F", "\u00B0C", "\u00B0K"};  /** Index for low value in subrangeInfo matrix. */  protected static final int RANGE_LOW = 0;  /** Index for high value in subrangeInfo matrix. */  protected static final int RANGE_HIGH = 1;  /** Index for display low value in subrangeInfo matrix. */  protected static final int DISPLAY_LOW = 2;  /** Index for display high value in subrangeInfo matrix. */  protected static final int DISPLAY_HIGH = 3;  /** The default lower bound. */  protected static final double DEFAULT_LOWER_BOUND = 0.0;  /** The default upper bound. */  protected static final double DEFAULT_UPPER_BOUND = 100.0;  /** The dataset for the plot. */  private ValueDataset dataset;  /** The range axis. */  private ValueAxis rangeAxis;  /** The lower bound for the thermometer. */  private double lowerBound = DEFAULT_LOWER_BOUND;  /** The upper bound for the thermometer. */  private double upperBound = DEFAULT_UPPER_BOUND;      /** Blank space inside the plot area around the outside of the thermometer. */  private Spacer padding;  /** Stroke for drawing the thermometer */  private transient Stroke thermometerStroke = new BasicStroke(1.0f);  /** Paint for drawing the thermometer */  private transient Paint thermometerPaint = Color.black;  /** The display units */  private int units = UNITS_CELCIUS;  /** The value label position. */  private int valueLocation = BULB;  /** The position of the axis **/  private int axisLocation = LEFT;  /** The font to write the value in */  private Font valueFont = new Font("SansSerif", Font.BOLD, 16);  /** Colour that the value is written in */  private transient Paint valuePaint = Color.white;  /** Number format for the value */  private NumberFormat valueFormat = new DecimalFormat();  /** The default paint for the mercury in the thermometer. */  private transient Paint mercuryPaint = Color.lightGray;  /** A flag that controls whether value lines are drawn. */  private boolean showValueLines = false;  /** The display sub-range. */  private int subrange = -1;  /** The start and end values for the subranges. */  private double[][] subrangeInfo = {      {      0.0, 50.0, 0.0, 50.0}      , {      50.0, 75.0, 50.0, 75.0}      , {      75.0, 100.0, 75.0, 100.0}  };  /** A flag that controls whether or not the axis range adjusts to the sub-ranges. */  private boolean followDataInSubranges = false;  /** A flag that controls whether or not the mercury paint changes with the subranges. */  private boolean useSubrangePaint = true;  /** Paint for each range */  private Paint[] subrangePaint = {      Color.green,      Color.orange,      Color.red  };  /** A flag that controls whether the sub-range indicators are visible. */  private boolean subrangeIndicatorsVisible = true;  /** The stroke for the sub-range indicators. */  private transient Stroke subrangeIndicatorStroke = new BasicStroke(2.0f);  /** The range indicator stroke. */  private transient Stroke rangeIndicatorStroke = new BasicStroke(3.0f);  /** The resourceBundle for the localization. */  protected static ResourceBundle localizationResources =      ResourceBundle.getBundle("org.jfree.chart.plot.LocalizationBundle");  /**   * Creates a new thermometer plot.   */  public ThermometerPlot() {    this(new DefaultValueDataset());  }  /**   * Creates a new thermometer plot, using default attributes where necessary.   *   * @param dataset  the data set.   */  public ThermometerPlot(ValueDataset dataset) {    super();    this.padding = new Spacer(Spacer.RELATIVE, 0.05, 0.05, 0.05, 0.05);    this.dataset = dataset;    if (dataset != null) {      dataset.addChangeListener(this);    }    NumberAxis axis = new NumberAxis(null);    axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());    axis.setAxisLineVisible(false);    setRangeAxis(axis);    setAxisRange();  }  /**   * Returns the primary dataset for the plot.   *   * @return The primary dataset (possibly <code>null</code>).   */  public ValueDataset getDataset() {    return this.dataset;  }  /**       * Sets the dataset for the plot, replacing the existing dataset if there is one.   *   * @param dataset  the dataset (<code>null</code> permitted).   */  public void setDataset(ValueDataset dataset) {    // if there is an existing dataset, remove the plot from the list of change listeners...    ValueDataset existing = this.dataset;    if (existing != null) {      existing.removeChangeListener(this);    }    // set the new dataset, and register the chart as a change listener...    this.dataset = dataset;    if (dataset != null) {      setDatasetGroup(dataset.getGroup());      dataset.addChangeListener(this);    }    // send a dataset change event to self...    DatasetChangeEvent event = new DatasetChangeEvent(this, dataset);    datasetChanged(event);  }  /**       * Returns the dataset cast to {@link ValueDataset} (provided for convenience).   *   * @return  the dataset for the plot, cast as a {@link ValueDataset}.   *   * @deprecated Use getDataset() instead.   */  public ValueDataset getData() {    return getDataset();  }  /**   * Sets the data for the chart, replacing any existing data.   * <P>   * Registered listeners are notified that the plot has been modified (this will normally   * trigger a chart redraw).   *   * @param dataset  the new dataset.   *   * @deprecated Use setDataset(...) instead.   */  public void setData(ValueDataset dataset) {      setDataset(dataset);  }  /**   * Returns the range axis.   *   * @return the range axis.   */  public ValueAxis getRangeAxis() {    return this.rangeAxis;  }  /**   * Sets the range axis for the plot.   * <P>   * An exception is thrown if the new axis and the plot are not mutually compatible.   *   * @param axis  the new axis.   */  public void setRangeAxis(ValueAxis axis) {    if (axis != null) {      axis.setPlot(this);      axis.addChangeListener(this);    }    // plot is likely registered as a listener with the existing axis...    if (this.rangeAxis != null) {      this.rangeAxis.removeChangeListener(this);    }    this.rangeAxis = axis;  }  /**   * Returns the lower bound for the thermometer.   * <p>   * The data value can be set lower than this, but it will not be shown in the thermometer.   *   * @return the lower bound.   *   */  public double getLowerBound() {    return this.lowerBound;  }  /**   * Sets the lower bound for the thermometer.   *   * @param lower the lower bound.   */  public void setLowerBound(double lower) {    this.lowerBound = lower;    setAxisRange();  }  /**   * Returns the upper bound for the thermometer.   * <p>   * The data value can be set higher than this, but it will not be shown in the thermometer.   *   * @return the upper bound.   *   */  public double getUpperBound() {    return this.upperBound;  }  /**   * Sets the upper bound for the thermometer.   *   * @param upper the upper bound.   */  public void setUpperBound(double upper) {    this.upperBound = upper;    setAxisRange();  }  /**   * Sets the lower and upper bounds for the thermometer.   *   * @param lower  the lower bound.   * @param upper  the upper bound.   */  public void setRange(double lower, double upper) {    this.lowerBound = lower;    this.upperBound = upper;    setAxisRange();  }  /**   * Returns the padding for the thermometer.  This is the space inside the plot area.   *   * @return the padding.   */  public Spacer getPadding() {    return this.padding;  }  /**   * Sets the padding for the thermometer.   *   * @param padding  the padding.   */  public void setPadding(Spacer padding) {    this.padding = padding;    notifyListeners(new PlotChangeEvent(this));  }

⌨️ 快捷键说明

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