亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? meterplot.java

?? jfreechart1.0.1 jsp繪制圖表的開發包
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/* ===========================================================
 * JFreeChart : a free chart library for the Java(tm) platform
 * ===========================================================
 *
 * (C) Copyright 2000-2005, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
 * USA.  
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 *
 * --------------
 * MeterPlot.java
 * --------------
 * (C) Copyright 2000-2005, by Hari and Contributors.
 *
 * Original Author:  Hari (ourhari@hotmail.com);
 * Contributor(s):   David Gilbert (for Object Refinery Limited);
 *                   Bob Orchard;
 *                   Arnaud Lelievre;
 *                   Nicolas Brodu;
 *                   David Bastend;
 *
 * $Id: MeterPlot.java,v 1.13.2.6 2005/11/28 12:06:35 mungady Exp $
 *
 * Changes
 * -------
 * 01-Apr-2002 : Version 1, contributed by Hari (DG);
 * 23-Apr-2002 : Moved dataset from JFreeChart to Plot (DG);
 * 22-Aug-2002 : Added changes suggest by Bob Orchard, changed Color to Paint 
 *               for consistency, plus added Javadoc comments (DG);
 * 01-Oct-2002 : Fixed errors reported by Checkstyle (DG);
 * 23-Jan-2003 : Removed one constructor (DG);
 * 26-Mar-2003 : Implemented Serializable (DG);
 * 20-Aug-2003 : Changed dataset from MeterDataset --> ValueDataset, added 
 *               equals() method,
 * 08-Sep-2003 : Added internationalization via use of properties 
 *               resourceBundle (RFE 690236) (AL); 
 *               implemented Cloneable, and various other changes (DG);
 * 08-Sep-2003 : Added serialization methods (NB);
 * 11-Sep-2003 : Added cloning support (NB);
 * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
 * 25-Sep-2003 : Fix useless cloning. Correct dataset listener registration in 
 *               constructor. (NB)
 * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG);
 * 17-Jan-2004 : Changed to allow dialBackgroundPaint to be set to null - see 
 *               bug 823628 (DG);
 * 07-Apr-2004 : Changed string bounds calculation (DG);
 * 12-May-2004 : Added tickLabelFormat attribute - see RFE 949566.  Also 
 *               updated the equals() method (DG);
 * 02-Nov-2004 : Added sanity checks for range, and only draw the needle if the 
 *               value is contained within the overall range - see bug report 
 *               1056047 (DG);
 * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 
 *               release (DG);
 * 02-Feb-2005 : Added optional background paint for each region (DG);
 * 22-Mar-2005 : Removed 'normal', 'warning' and 'critical' regions and put in
 *               facility to define an arbitrary number of MeterIntervals,
 *               based on a contribution by David Bastend (DG);
 * 20-Apr-2005 : Small update for change to LegendItem constructors (DG);
 * 05-May-2005 : Updated draw() method parameters (DG);
 * 08-Jun-2005 : Fixed equals() method to handle GradientPaint (DG);
 * 10-Nov-2005 : Added tickPaint, tickSize and valuePaint attributes, and
 *               put value label drawing code into a separate method (DG);
 * 
 */

package org.jfree.chart.plot;

import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
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 java.text.NumberFormat;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;

import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.event.PlotChangeEvent;
import org.jfree.data.Range;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.ValueDataset;
import org.jfree.io.SerialUtilities;
import org.jfree.text.TextUtilities;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
import org.jfree.util.ObjectUtilities;
import org.jfree.util.PaintUtilities;

/**
 * A plot that displays a single value in the form of a needle on a dial.  
 * Defined ranges (for example, 'normal', 'warning' and 'critical') can be
 * highlighted on the dial.
 */
public class MeterPlot extends Plot implements Serializable, Cloneable {

    /** For serialization. */
    private static final long serialVersionUID = 2987472457734470962L;
    
    /** The default background paint. */
    static final Paint DEFAULT_DIAL_BACKGROUND_PAINT = Color.black;

    /** The default needle paint. */
    static final Paint DEFAULT_NEEDLE_PAINT = Color.green;

    /** The default value font. */
    static final Font DEFAULT_VALUE_FONT = new Font("SansSerif", Font.BOLD, 12);

    /** The default value paint. */
    static final Paint DEFAULT_VALUE_PAINT = Color.yellow;

    /** The default meter angle. */
    public static final int DEFAULT_METER_ANGLE = 270;

    /** The default border size. */
    public static final float DEFAULT_BORDER_SIZE = 3f;

    /** The default circle size. */
    public static final float DEFAULT_CIRCLE_SIZE = 10f;

    /** The default label font. */
    public static final Font DEFAULT_LABEL_FONT 
        = new Font("SansSerif", Font.BOLD, 10);

    /** The dataset (contains a single value). */
    private ValueDataset dataset;

    /** The dial shape (background shape). */
    private DialShape shape;

    /** The dial extent (measured in degrees). */
    private int meterAngle;
    
    /** The overall range of data values on the dial. */
    private Range range;
    
    /** The tick size. */
    private double tickSize;
    
    /** The paint used to draw the ticks. */
    private Paint tickPaint;
    
    /** The units displayed on the dial. */    
    private String units;
    
    /** The font for the value displayed in the center of the dial. */
    private Font valueFont;

    /** The paint for the value displayed in the center of the dial. */
    private transient Paint valuePaint;

    /** A flag that controls whether or not the border is drawn. */
    private boolean drawBorder;

    /** The outline paint. */
    private transient Paint dialOutlinePaint;

    /** The paint for the dial background. */
    private transient Paint dialBackgroundPaint;

    /** The paint for the needle. */
    private transient Paint needlePaint;

    /** A flag that controls whether or not the tick labels are visible. */
    private boolean tickLabelsVisible;

    /** The tick label font. */
    private Font tickLabelFont;

    /** The tick label paint. */
    private Paint tickLabelPaint;
    
    /** The tick label format. */
    private NumberFormat tickLabelFormat;

    /** The resourceBundle for the localization. */
    protected static ResourceBundle localizationResources = 
        ResourceBundle.getBundle("org.jfree.chart.plot.LocalizationBundle");

    /** 
     * A (possibly empty) list of the {@link MeterInterval}s to be highlighted 
     * on the dial. 
     */
    private List intervals;

    /**
     * Creates a new plot with a default range of <code>0</code> to 
     * <code>100</code> and no value to display.
     */
    public MeterPlot() {
        this(null);   
    }
    
    /**
     * Creates a new plot that displays the value from the supplied dataset.
     *
     * @param dataset  the dataset (<code>null</code> permitted).
     */
    public MeterPlot(ValueDataset dataset) {
        super();
        this.shape = DialShape.CIRCLE;
        this.meterAngle = DEFAULT_METER_ANGLE;
        this.range = new Range(0.0, 100.0);
        this.tickSize = 10.0;
        this.tickPaint = Color.white;
        this.units = "Units";
        this.needlePaint = MeterPlot.DEFAULT_NEEDLE_PAINT;
        this.tickLabelsVisible = true;
        this.tickLabelFont = MeterPlot.DEFAULT_LABEL_FONT;
        this.tickLabelPaint = Color.black;
        this.tickLabelFormat = NumberFormat.getInstance();
        this.valueFont = MeterPlot.DEFAULT_VALUE_FONT;
        this.valuePaint = MeterPlot.DEFAULT_VALUE_PAINT;
        this.dialBackgroundPaint = MeterPlot.DEFAULT_DIAL_BACKGROUND_PAINT;
        this.intervals = new java.util.ArrayList();
        setDataset(dataset);
    }

    /**
     * Returns the dial shape.  The default is {@link DialShape#CIRCLE}).
     * 
     * @return The dial shape (never <code>null</code>).
     */
    public DialShape getDialShape() {
        return this.shape;
    }
    
    /**
     * Sets the dial shape and sends a {@link PlotChangeEvent} to all 
     * registered listeners.
     * 
     * @param shape  the shape (<code>null</code> not permitted).
     */
    public void setDialShape(DialShape shape) {
        if (shape == null) {
            throw new IllegalArgumentException("Null 'shape' argument.");
        }
        this.shape = shape;
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Returns the meter angle in degrees.  This defines, in part, the shape
     * of the dial.  The default is 270 degrees.
     *
     * @return The meter angle (in degrees).
     */
    public int getMeterAngle() {
        return this.meterAngle;
    }

    /**
     * Sets the angle (in degrees) for the whole range of the dial and sends 
     * a {@link PlotChangeEvent} to all registered listeners.
     * 
     * @param angle  the angle (in degrees, in the range 1-360).
     */
    public void setMeterAngle(int angle) {
        if (angle < 1 || angle > 360) {
            throw new IllegalArgumentException(
                "Invalid 'angle' (" + angle + ")"
            );
        }
        this.meterAngle = angle;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns the overall range for the dial.
     * 
     * @return The overall range (never <code>null</code>).
     */
    public Range getRange() {
        return this.range;    
    }
    
    /**
     * Sets the range for the dial and sends a {@link PlotChangeEvent} to all
     * registered listeners.
     * 
     * @param range  the range (<code>null</code> not permitted and zero-length
     *               ranges not permitted).
     */
    public void setRange(Range range) {
        if (range == null) {
            throw new IllegalArgumentException("Null 'range' argument.");
        }
        if (!(range.getLength() > 0.0)) {
            throw new IllegalArgumentException(
                "Range length must be positive."
            );
        }
        this.range = range;
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Returns the tick size (the interval between ticks on the dial).
     * 
     * @return The tick size.
     */
    public double getTickSize() {
        return this.tickSize;
    }
    
    /**
     * Sets the tick size and sends a {@link PlotChangeEvent} to all 
     * registered listeners.
     * 
     * @param size  the tick size (must be > 0).
     */
    public void setTickSize(double size) {
        if (size <= 0) {
            throw new IllegalArgumentException("Requires 'size' > 0.");
        }
        this.tickSize = size;
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Returns the paint used to draw the ticks around the dial. 
     * 
     * @return The paint used to draw the ticks around the dial (never 
     *         <code>null</code>).
     */
    public Paint getTickPaint() {
        return this.tickPaint;
    }
    
    /**
     * Sets the paint used to draw the tick labels around the dial.
     * 
     * @param paint  the paint (<code>null</code> not permitted).
     */
    public void setTickPaint(Paint paint) {
        if (paint == null) {
            throw new IllegalArgumentException("Null 'paint' argument.");
        }
        this.tickPaint = paint;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns a string describing the units for the dial.
     * 
     * @return The units (possibly <code>null</code>).
     */
    public String getUnits() {
        return this.units;
    }
    
    /**
     * Sets the units for the dial and sends a {@link PlotChangeEvent} to all
     * registered listeners.
     * 
     * @param units  the units (<code>null</code> permitted).
     */
    public void setUnits(String units) {
        this.units = units;    
        notifyListeners(new PlotChangeEvent(this));
    }
        
    /**
     * Returns the paint for the needle.
     *
     * @return The paint (never <code>null</code>).
     */
    public Paint getNeedlePaint() {
        return this.needlePaint;
    }

    /**
     * Sets the paint used to display the needle and sends a 
     * {@link PlotChangeEvent} to all registered listeners.
     *
     * @param paint  the paint (<code>null</code> not permitted).
     */
    public void setNeedlePaint(Paint paint) {
        if (paint == null) {
            throw new IllegalArgumentException("Null 'paint' argument.");
        }
        this.needlePaint = paint;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns the flag that determines whether or not tick labels are visible.
     *
     * @return The flag.
     */
    public boolean getTickLabelsVisible() {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看中文字幕不卡| 久久久亚洲欧洲日产国码αv| www.成人在线| 国产二区国产一区在线观看| 国产曰批免费观看久久久| 三级一区在线视频先锋 | 国产精品久久久久久久久免费桃花| 日韩欧美一级特黄在线播放| 538prom精品视频线放| 911国产精品| 欧美一区二区视频观看视频| 欧美一级精品在线| 日韩一区二区不卡| 欧美精品一区二区精品网| 精品久久一二三区| 久久综合九色综合97_久久久| 精品国产乱子伦一区| 欧美精品一区在线观看| 日韩欧美国产精品一区| 精品三级av在线| 欧美激情在线一区二区三区| 国产精品国产三级国产普通话三级 | 欧美精品vⅰdeose4hd| 337p亚洲精品色噜噜噜| 精品国产污污免费网站入口| 欧美激情资源网| 亚洲精选一二三| 亚洲第一电影网| 蜜臀av一区二区在线观看| 国产久卡久卡久卡久卡视频精品| 国产一区二区三区电影在线观看| 高清免费成人av| 一本一道久久a久久精品综合蜜臀| 色噜噜夜夜夜综合网| 欧美顶级少妇做爰| 国产午夜一区二区三区| 国产精品美女久久久久aⅴ| 一区二区成人在线视频| 日本不卡一区二区三区| 粉嫩嫩av羞羞动漫久久久| 色嗨嗨av一区二区三区| 日韩区在线观看| 国产精品精品国产色婷婷| 一区二区三区欧美日韩| 老司机精品视频在线| 99久久精品免费看国产| 欧美无砖砖区免费| 精品少妇一区二区三区在线播放 | 色94色欧美sute亚洲线路一久| 欧美日韩成人综合天天影院| 久久免费偷拍视频| 亚洲一区在线观看免费观看电影高清 | 亚洲人成网站在线| 美国欧美日韩国产在线播放| av毛片久久久久**hd| 91麻豆精品国产91久久久更新时间 | 欧美电影免费观看高清完整版在线| 国产日韩精品久久久| 亚洲香肠在线观看| 91精品国产综合久久蜜臀| 国产日韩欧美一区二区三区乱码| 亚洲福利视频导航| 成人免费视频国产在线观看| 欧美日韩一级大片网址| 日本一二三不卡| 日本特黄久久久高潮| 99视频热这里只有精品免费| 欧美刺激午夜性久久久久久久| 亚洲欧美日韩系列| 韩国精品主播一区二区在线观看 | 亚洲成a人v欧美综合天堂| 国产成人在线网站| 91麻豆精品91久久久久同性| 亚洲免费av观看| 国产精品一区二区你懂的| 欧美一级生活片| 亚洲制服丝袜av| av在线播放成人| 26uuu国产电影一区二区| 亚洲高清免费视频| 99这里都是精品| 精品国产自在久精品国产| 亚洲成av人影院| 91视频www| 国产精品每日更新| 国产一区二区三区蝌蚪| 日韩欧美专区在线| 午夜精品成人在线| 欧美喷水一区二区| 亚洲一区二区四区蜜桃| 成人国产视频在线观看 | 久久国内精品视频| 欧美色男人天堂| 亚洲精品国产a| 91丨porny丨中文| 中文字幕亚洲成人| 成人美女视频在线看| 久久综合久久综合亚洲| 麻豆视频一区二区| 欧美日韩日日夜夜| 五月激情丁香一区二区三区| 日本久久一区二区| 一区二区三区美女视频| 91丝袜高跟美女视频| 中文字幕在线不卡一区| 成人精品在线视频观看| 国产欧美日韩三区| 国产精品系列在线播放| 久久久久久久综合色一本| 黑人精品欧美一区二区蜜桃| 久久夜色精品国产欧美乱极品| 久久精品国产亚洲aⅴ| 日韩欧美在线不卡| 久久精品久久综合| 久久久青草青青国产亚洲免观| 国产精品白丝jk黑袜喷水| 国产欧美精品区一区二区三区 | 日韩欧美国产一区二区在线播放 | 欧美唯美清纯偷拍| 亚洲大尺度视频在线观看| 在线成人av网站| 免费成人在线观看视频| 欧美成人性战久久| 国产精一区二区三区| 国产精品国产馆在线真实露脸 | 国产精品美女久久久久久久 | 日本一区二区三级电影在线观看 | 国产自产高清不卡| 亚洲国产精品av| 93久久精品日日躁夜夜躁欧美| 日韩一区在线免费观看| 在线观看日韩国产| 天堂蜜桃一区二区三区 | 久久精品久久精品| 国产人成亚洲第一网站在线播放| a4yy欧美一区二区三区| 亚洲一区免费在线观看| 精品国产一区二区三区四区四| 成人夜色视频网站在线观看| 亚洲人成人一区二区在线观看 | 欧美日韩中文字幕一区| 日韩主播视频在线| 久久久天堂av| 91久久线看在观草草青青| 天天免费综合色| 欧美精品一区二区三区久久久| 波多野结衣中文字幕一区二区三区| 亚洲乱码精品一二三四区日韩在线| 欧美日韩国产大片| 国产成人在线视频网址| 亚洲午夜精品17c| 精品国产91乱码一区二区三区 | 成人精品一区二区三区四区| 亚洲国产综合在线| 欧美精品一区二区久久婷婷| 色8久久精品久久久久久蜜| 久久不见久久见中文字幕免费| 国产精品麻豆视频| 制服丝袜日韩国产| 成人黄色国产精品网站大全在线免费观看| 一区二区三区电影在线播| 欧美成人伊人久久综合网| 99国产精品久| 久久av资源网| 一区二区三区**美女毛片| 国产亚洲一区二区三区四区| 欧美日韩电影一区| 99re这里只有精品首页| 久久99精品国产.久久久久| 亚洲欧美日韩中文播放 | 亚洲国产精品尤物yw在线观看| 久久精品在线观看| 欧美日韩精品电影| 成人av免费观看| 久久电影网电视剧免费观看| 亚洲图片有声小说| 综合激情成人伊人| 久久网站最新地址| 欧美日韩高清不卡| 一本色道久久综合亚洲aⅴ蜜桃| 精品无人码麻豆乱码1区2区| 午夜精品在线看| 怡红院av一区二区三区| 国产亚洲人成网站| 日韩欧美国产一区二区三区| 欧美色区777第一页| 色综合天天在线| 粉嫩高潮美女一区二区三区| 蜜桃在线一区二区三区| 亚洲成人资源网| 亚洲卡通欧美制服中文| 欧美国产精品一区二区三区| 精品久久五月天| 日韩精品一区二区三区老鸭窝| 欧美色图激情小说| 色婷婷久久99综合精品jk白丝| aa级大片欧美| 成人理论电影网| 国产91精品精华液一区二区三区 | 久久精品国产精品亚洲精品|