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

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

?? meterplot.java

?? jfreechart1.0.1 jsp繪制圖表的開發包
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
        return this.tickLabelsVisible;
    }

    /**
     * Sets the flag that controls whether or not the tick labels are visible
     * and sends a {@link PlotChangeEvent} to all registered listeners.
     *
     * @param visible  the flag.
     */
    public void setTickLabelsVisible(boolean visible) {
        if (this.tickLabelsVisible != visible) {
            this.tickLabelsVisible = visible;
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Returns the tick label font.
     *
     * @return The font (never <code>null</code>).
     */
    public Font getTickLabelFont() {
        return this.tickLabelFont;
    }

    /**
     * Sets the tick label font and sends a {@link PlotChangeEvent} to all 
     * registered listeners.
     *
     * @param font  the font (<code>null</code> not permitted).
     */
    public void setTickLabelFont(Font font) {
        if (font == null) {
            throw new IllegalArgumentException("Null 'font' argument.");
        }
        if (!this.tickLabelFont.equals(font)) {
            this.tickLabelFont = font;
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Returns the tick label paint.
     *
     * @return The paint (never <code>null</code>).
     */
    public Paint getTickLabelPaint() {
        return this.tickLabelPaint;
    }

    /**
     * Sets the tick label paint and sends a {@link PlotChangeEvent} to all 
     * registered listeners.
     *
     * @param paint  the paint (<code>null</code> not permitted).
     */
    public void setTickLabelPaint(Paint paint) {
        if (paint == null) {
            throw new IllegalArgumentException("Null 'paint' argument.");
        }
        if (!this.tickLabelPaint.equals(paint)) {
            this.tickLabelPaint = paint;
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Returns the tick label format.
     * 
     * @return The tick label format (never <code>null</code>).
     */
    public NumberFormat getTickLabelFormat() {
        return this.tickLabelFormat;    
    }
    
    /**
     * Sets the format for the tick labels and sends a {@link PlotChangeEvent} 
     * to all registered listeners.
     * 
     * @param format  the format (<code>null</code> not permitted).
     */
    public void setTickLabelFormat(NumberFormat format) {
        if (format == null) {
            throw new IllegalArgumentException("Null 'format' argument.");   
        }
        this.tickLabelFormat = format;
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Returns the font for the value label.
     *
     * @return The font (never <code>null</code>).
     */
    public Font getValueFont() {
        return this.valueFont;
    }

    /**
     * Sets the font used to display the value label and sends a 
     * {@link PlotChangeEvent} to all registered listeners.
     *
     * @param font  the font (<code>null</code> not permitted).
     */
    public void setValueFont(Font font) {
        if (font == null) {
            throw new IllegalArgumentException("Null 'font' argument.");
        }
        this.valueFont = font;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns the paint for the value label.
     *
     * @return The paint (never <code>null</code>).
     */
    public Paint getValuePaint() {
        return this.valuePaint;
    }

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

    /**
     * Returns the paint for the dial background.
     *
     * @return The paint (possibly <code>null</code>).
     */
    public Paint getDialBackgroundPaint() {
        return this.dialBackgroundPaint;
    }

    /**
     * Sets the paint used to fill the dial background.  Set this to 
     * <code>null</code> for no background.
     *
     * @param paint  the paint (<code>null</code> permitted).
     */
    public void setDialBackgroundPaint(Paint paint) {
        this.dialBackgroundPaint = paint;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns a flag that controls whether or not a rectangular border is 
     * drawn around the plot area.
     *
     * @return A flag.
     */
    public boolean getDrawBorder() {
        return this.drawBorder;
    }

    /**
     * Sets the flag that controls whether or not a rectangular border is drawn
     * around the plot area and sends a {@link PlotChangeEvent} to all 
     * registered listeners.
     *
     * @param draw  the flag.
     */
    public void setDrawBorder(boolean draw) {
        // TODO: fix output when this flag is set to true
        this.drawBorder = draw;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns the dial outline paint.
     *
     * @return The paint.
     */
    public Paint getDialOutlinePaint() {
        return this.dialOutlinePaint;
    }

    /**
     * Sets the dial outline paint and sends a {@link PlotChangeEvent} to all
     * registered listeners.
     *
     * @param paint  the paint.
     */
    public void setDialOutlinePaint(Paint paint) {
        this.dialOutlinePaint = paint;
        notifyListeners(new PlotChangeEvent(this));        
    }

    /**
     * Returns the dataset for the plot.
     * 
     * @return The 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, and triggers a {@link PlotChangeEvent}.
     * 
     * @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 an unmodifiable list of the intervals for the plot.
     * 
     * @return A list.
     */
    public List getIntervals() {
        return Collections.unmodifiableList(this.intervals);
    }
    
    /**
     * Adds an interval and sends a {@link PlotChangeEvent} to all registered
     * listeners.
     * 
     * @param interval  the interval (<code>null</code> not permitted).
     */
    public void addInterval(MeterInterval interval) {
        if (interval == null) {
            throw new IllegalArgumentException("Null 'interval' argument.");
        }
        this.intervals.add(interval);
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Clears the intervals for the plot and sends a {@link PlotChangeEvent} to
     * all registered listeners. 
     */
    public void clearIntervals() {
        this.intervals.clear();
        notifyListeners(new PlotChangeEvent(this));
    }
    
    /**
     * Returns an item for each interval.
     *
     * @return A collection of legend items.
     */
    public LegendItemCollection getLegendItems() {
        LegendItemCollection result = new LegendItemCollection();
        Iterator iterator = this.intervals.iterator();
        while (iterator.hasNext()) {
            MeterInterval mi = (MeterInterval) iterator.next();
            Paint color = mi.getBackgroundPaint();
            if (color == null) {
                color = mi.getOutlinePaint();
            }
            LegendItem item = new LegendItem(mi.getLabel(), mi.getLabel(),
                    null, null, new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0), 
                    color);
            result.add(item);
        }
        return result;
    }

    /**
     * Draws the plot on a Java 2D graphics device (such as the screen or a 
     * printer).
     *
     * @param g2  the graphics device.
     * @param area  the area within which the plot should be drawn.
     * @param anchor  the anchor point (<code>null</code> permitted).
     * @param parentState  the state from the parent plot, if there is one.
     * @param info  collects info about the drawing.
     */
    public void draw(Graphics2D g2, Rectangle2D area, Point2D anchor,
                     PlotState parentState,
                     PlotRenderingInfo info) {

        if (info != null) {
            info.setPlotArea(area);
        }

        // adjust for insets...
        RectangleInsets insets = getInsets();
        insets.trim(area);

        area.setRect(
            area.getX() + 4, area.getY() + 4,
            area.getWidth() - 8, area.getHeight() - 8
        );

        // draw the background
        if (this.drawBorder) {
            drawBackground(g2, area);
        }

        // adjust the plot area by the interior spacing value
        double gapHorizontal = (2 * DEFAULT_BORDER_SIZE);
        double gapVertical = (2 * DEFAULT_BORDER_SIZE);
        double meterX = area.getX() + gapHorizontal / 2;
        double meterY = area.getY() + gapVertical / 2;
        double meterW = area.getWidth() - gapHorizontal;
        double meterH = area.getHeight() - gapVertical
            + ((this.meterAngle <= 180) && (this.shape != DialShape.CIRCLE)
                ? area.getHeight() / 1.25 : 0);

        double min = Math.min(meterW, meterH) / 2;
        meterX = (meterX + meterX + meterW) / 2 - min;
        meterY = (meterY + meterY + meterH) / 2 - min;
        meterW = 2 * min;
        meterH = 2 * min;

        Rectangle2D meterArea = new Rectangle2D.Double(
            meterX, meterY, meterW, meterH
        );

        Rectangle2D.Double originalArea = new Rectangle2D.Double(
            meterArea.getX() - 4, meterArea.getY() - 4, 
            meterArea.getWidth() + 8, meterArea.getHeight() + 8
        );

        double meterMiddleX = meterArea.getCenterX();
        double meterMiddleY = meterArea.getCenterY();

        // plot the data (unless the dataset is null)...
        ValueDataset data = getDataset();
        if (data != null) {
            double dataMin = this.range.getLowerBound();
            double dataMax = this.range.getUpperBound();

            Shape savedClip = g2.getClip();
            g2.clip(originalArea);
            Composite originalComposite = g2.getComposite();
            g2.setComposite(AlphaComposite.getInstance(
                AlphaComposite.SRC_OVER, getForegroundAlpha())
            );

            if (this.dialBackgroundPaint != null) {
                fillArc(
                    g2, originalArea, dataMin, dataMax, 
                    this.dialBackgroundPaint, true
                );
            }
            drawTicks(g2, meterArea, dataMin, dataMax);
            drawArcForInterval(
                g2, meterArea, 
                new MeterInterval(
                    "", this.range, this.dialOutlinePaint, 
                    new BasicStroke(1.0f), null
                )
            );
            
            Iterator iterator = this.intervals.iterator();
            while (iterator.hasNext()) {
                MeterInterval interval = (MeterInterval) iterator.next();
                drawArcForInterval(g2, meterArea, interval);
            }

            Number n = data.getValue();
            if (n != null) {
                double value = n.doubleValue();
                drawValueLabel(g2, meterArea);
  
                if (this.range.contains(value)) {
                    g2.setPaint(this.needlePaint);
                    g2.setStroke(new BasicStroke(2.0f));

                    double radius = (meterArea.getWidth() / 2) 
                                    + DEFAULT_BORDER_SIZE + 15;
                    double valueAngle = valueToAngle(value);
                    double valueP1 = meterMiddleX 
                        + (radius * Math.cos(Math.PI * (valueAngle / 180)));
                    double valueP2 = meterMiddleY 
                        - (radius * Math.sin(Math.PI * (valueAngle / 180)));

                    Polygon arrow = new Polygon();
                    if ((valueAngle > 135 && valueAngle < 225)
                        || (valueAngle < 45 && valueAngle > -45)) {

                        double valueP3 = (meterMiddleY 
                                - DEFAULT_CIRCLE_SIZE / 4);
                        double valueP4 = (meterMiddleY 
                                + DEFAULT_CIRCLE_SIZE / 4);
                        arrow.addPoint((int) meterMiddleX, (int) valueP3);
                        arrow.addPoint((int) meterMiddleX, (int) valueP4);
 
                    }
                    else {
                        arrow.addPoint(
                            (int) (meterMiddleX - DEFAULT_CIRCLE_SIZE / 4),
                            (int) meterMiddleY
                        );
                        arrow.addPoint(
                            (int) (meterMiddleX + DEFAULT_CIRCLE_SIZE / 4),
                            (int) meterMiddleY
                        );
                    }
                    arrow.addPoint((int) valueP1, (int) valueP2);
                    g2.fill(arrow);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.成人在线| www.激情成人| 国模套图日韩精品一区二区| 成人av网站大全| 日韩欧美国产一二三区| 亚洲男同1069视频| 久久er精品视频| 欧美三级乱人伦电影| 久久久99久久| 蜜桃视频免费观看一区| 欧美性极品少妇| 国产精品视频第一区| 另类小说视频一区二区| 在线精品视频免费播放| 国产精品人人做人人爽人人添 | 成人福利电影精品一区二区在线观看| 欧美色网一区二区| 日韩精品一区二区三区swag | 综合久久一区二区三区| 久久99国产精品麻豆| 欧美日韩国产美| 一区二区不卡在线播放| 成人av在线影院| 国产精品拍天天在线| 国产一区二区精品久久91| 337p亚洲精品色噜噜噜| 一区二区三区日本| 色偷偷成人一区二区三区91| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 丁香一区二区三区| 久久精品亚洲麻豆av一区二区 | 久久众筹精品私拍模特| 日韩高清不卡一区二区| 欧美电影在线免费观看| 婷婷成人激情在线网| 欧美日韩在线免费视频| 一区二区成人在线观看| 在线免费不卡视频| 亚洲制服丝袜在线| 欧美亚洲国产一区二区三区va | 亚洲欧美日韩中文播放| 91啪在线观看| 亚洲欧美日韩国产另类专区| 色综合一区二区| 夜夜嗨av一区二区三区中文字幕| 99久久免费视频.com| 亚洲精品日日夜夜| 欧美日韩不卡视频| 久久国产精品一区二区| 国产日韩欧美精品一区| 不卡的看片网站| 伊人开心综合网| 欧美一区二区人人喊爽| 国产久卡久卡久卡久卡视频精品| 欧美激情综合五月色丁香| 91在线高清观看| 亚洲成年人网站在线观看| 欧美成人一级视频| 高清不卡一区二区| 一区二区三区 在线观看视频 | 另类欧美日韩国产在线| 国产亚洲人成网站| 在线免费观看日韩欧美| 久久精品免费观看| 中文字幕亚洲电影| 91精品国产综合久久福利| 国产91在线|亚洲| 亚洲在线成人精品| 精品久久久久久久久久久院品网| 成人免费视频app| 亚洲bt欧美bt精品777| 国产美女久久久久| 一本到不卡精品视频在线观看| 99视频精品在线| 国产成人在线网站| 亚洲自拍与偷拍| 久久伊人蜜桃av一区二区| 91视视频在线直接观看在线看网页在线看 | 久久91精品国产91久久小草| 成人欧美一区二区三区视频网页| 欧美嫩在线观看| 成人一区二区三区视频| 五月天激情综合网| 亚洲欧美影音先锋| 精品成人免费观看| 欧美老肥妇做.爰bbww视频| 国产高清精品在线| 日韩欧美中文字幕一区| 精品国产免费视频| 91亚洲大成网污www| 极品少妇xxxx偷拍精品少妇| 亚洲夂夂婷婷色拍ww47| 国产精品免费久久久久| 欧美成va人片在线观看| 欧美色视频一区| 91麻豆swag| 成人免费视频caoporn| 国产在线播放一区三区四| 日日嗨av一区二区三区四区| 洋洋av久久久久久久一区| 国产精品理伦片| 国产天堂亚洲国产碰碰| 精品国内片67194| 日韩欧美亚洲国产精品字幕久久久| 欧美日韩一区 二区 三区 久久精品| 国产成人精品免费| 国产一区二区三区免费观看| 蜜臀久久99精品久久久久久9 | 日本道精品一区二区三区| 亚洲精品v日韩精品| 51午夜精品国产| 国产91精品一区二区麻豆网站 | 国产婷婷色一区二区三区在线| 日韩一区二区在线观看视频| 欧美日韩免费在线视频| 在线一区二区三区四区五区| 色欲综合视频天天天| av福利精品导航| 91在线视频在线| 91麻豆免费看| 欧美亚洲综合久久| 欧美视频一区二区三区四区| 在线影视一区二区三区| 欧美日韩在线免费视频| 日韩欧美色电影| 久久婷婷一区二区三区| 国产精品视频一二| 亚洲精品欧美二区三区中文字幕| 亚洲综合自拍偷拍| 亚洲成人动漫一区| 蜜桃在线一区二区三区| 国产剧情av麻豆香蕉精品| k8久久久一区二区三区| 色网综合在线观看| 欧美日韩亚洲不卡| 日韩精品一区二区三区中文不卡| 欧美精品一区二区三区一线天视频 | 国产在线乱码一区二区三区| 国产传媒日韩欧美成人| 成人av在线网站| 欧美久久久久久久久中文字幕| 日韩亚洲电影在线| 久久这里只有精品视频网| 国产精品福利影院| 亚洲国产精品久久艾草纯爱| 玖玖九九国产精品| 不卡av在线网| 在线综合亚洲欧美在线视频| 久久精品视频在线免费观看| 亚洲少妇30p| 蜜桃久久精品一区二区| 9久草视频在线视频精品| 欧美挠脚心视频网站| 国产人妖乱国产精品人妖| 亚洲宅男天堂在线观看无病毒| 久久电影网站中文字幕| 色婷婷av一区二区三区软件 | 欧美日本国产视频| 国产丝袜在线精品| 亚洲成a人片综合在线| 大胆亚洲人体视频| 3751色影院一区二区三区| 中文字幕一区二区三区在线不卡| 亚洲国产欧美在线| 懂色av一区二区三区免费观看| 欧美日韩国产乱码电影| 日韩理论片在线| 国产成人自拍在线| 欧美一区二区三区在| 亚洲欧洲在线观看av| 免费高清在线一区| 欧美艳星brazzers| 国产精品素人视频| 久久99精品视频| 欧美精品在线观看一区二区| 17c精品麻豆一区二区免费| 麻豆一区二区三| 欧美日韩高清一区二区| 成人欧美一区二区三区小说 | 99re成人精品视频| 久久婷婷综合激情| 久久精品久久综合| 欧美三级日韩在线| 一区二区免费看| 不卡的av电影在线观看| 国产欧美精品一区二区色综合 | 久久国产视频网| 69p69国产精品| 午夜精品福利一区二区三区av | 免费观看在线色综合| 色激情天天射综合网| 国产精品久久久久影院| 国产一区福利在线| 久久亚洲综合av| 久久精品二区亚洲w码| 69av一区二区三区| 午夜成人免费视频| 欧美一级爆毛片| 青娱乐精品视频| 久久影视一区二区|