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

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

?? plot.java

?? Web圖形化的Java庫
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
            g2.setPaint(outlinePaint);
            g2.draw(area);
        }

    }

    /**
     * Draws a message to state that there is no data to plot.
     *
     * @param g2  the graphics device.
     * @param area  the area within which the plot should be drawn.
     */
    protected void drawNoDataMessage(Graphics2D g2, Rectangle2D area) {

        Shape savedClip = g2.getClip();
        g2.clip(area);
        String message = this.noDataMessage;
        if (message != null) {
            g2.setFont(this.noDataMessageFont);
            g2.setPaint(this.noDataMessagePaint);
            FontRenderContext frc = g2.getFontRenderContext();
            Rectangle2D bounds = noDataMessageFont.getStringBounds(message, frc);
            float x = (float) (area.getX() + area.getWidth() / 2 - bounds.getWidth() / 2);
            float y = (float) (area.getMinY() + (area.getHeight() / 2) - (bounds.getHeight() / 2));
            g2.drawString(message, x, y);
        }
        g2.clip(savedClip);

    }

    /**
     * Handles a 'click' on the plot.  Since the plot does not maintain any
     * information about where it has been drawn, the plot area is supplied as
     * an argument.
     *
     * @param x  the x coordinate.
     * @param y  the y coordinate.
     * @param info  an object for collecting information about the drawing of the chart.
     */
    public void handleClick(int x, int y, ChartRenderingInfo info) {

    }

    /**
     * Performs a zoom on the plot.  Subclasses should override if zooming is appropriate for
     * the type of plot.
     *
     * @param percent  the zoom percentage.
     */
    public void zoom(double percent) {
        // do nothing by default.
    }

    /**
     * Receives notification of a change to one of the plot's axes.
     *
     * @param event  information about the event (not used here).
     */
    public void axisChanged(AxisChangeEvent event) {
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Receives notification of a change to the plot's dataset.
     * <P>
     * The plot reacts by passing on a plot change event to all registered listeners.
     *
     * @param event  information about the event (not used here).
     */
    public void datasetChanged(DatasetChangeEvent event) {

        PlotChangeEvent newEvent = new PlotChangeEvent(this);
        notifyListeners(newEvent);

    }

    /**
     * Adjusts the supplied x-value.
     *
     * @param x  the x-value.
     * @param w1  width 1.
     * @param w2  width 2.
     * @param edge  the edge (left or right).
     *
     * @return the adjusted x-value.
     */
    protected double getRectX(double x, double w1, double w2, RectangleEdge edge) {

        double result = x;
        if (edge == RectangleEdge.LEFT) {
            result = result + w1;
        }
        else if (edge == RectangleEdge.RIGHT) {
            result = result + w2;
        }
        return result;

    }

    /**
     * Adjusts the supplied y-value.
     *
     * @param y  the x-value.
     * @param h1  height 1.
     * @param h2  height 2.
     * @param edge  the edge (top or bottom).
     *
     * @return the adjusted y-value.
     */
    protected double getRectY(double y, double h1, double h2, RectangleEdge edge) {

        double result = y;
        if (edge == RectangleEdge.TOP) {
            result = result + h1;
        }
        else if (edge == RectangleEdge.BOTTOM) {
            result = result + h2;
        }
        return result;

    }

    /**
     * Returns the data area ratio.
     *
     * @return The ratio.
     */
    public double getDataAreaRatio() {
        return dataAreaRatio;
    }

    /**
     * Sets the data area ratio.
     *
     * @param ratio  the ratio.
     */
    public void setDataAreaRatio(double ratio) {
        this.dataAreaRatio = ratio;
    }

    /**
     * Tests this plot for equality with another object.
     *
     * @param obj  the object.
     *
     * @return <code>true</code> or <code>false</code>.
     */
    public boolean equals(Object obj) {

        if (obj == null) {
            return false;
        }

        if (obj == this) {
            return true;
        }

        if (obj instanceof Plot) {

            Plot p = (Plot) obj;

            boolean b5 = ObjectUtils.equal(this.noDataMessage, p.noDataMessage);
            boolean b6 = ObjectUtils.equal(this.noDataMessageFont, p.noDataMessageFont);
            boolean b7 = ObjectUtils.equal(this.noDataMessagePaint, p.noDataMessagePaint);

            boolean b8 = ObjectUtils.equal(this.insets, p.insets);
            boolean b9 = ObjectUtils.equal(this.outlineStroke, p.outlineStroke);
            boolean b10 = ObjectUtils.equal(this.outlinePaint, p.outlinePaint);

            boolean b11 = ObjectUtils.equal(this.backgroundPaint, p.backgroundPaint);
            boolean b12 = ObjectUtils.equal(this.backgroundImage, p.backgroundImage);
            boolean b13 = (this.backgroundImageAlignment == p.backgroundImageAlignment);

            boolean b14 = (this.foregroundAlpha == p.foregroundAlpha);
            boolean b15 = (this.backgroundAlpha == p.backgroundAlpha);

            return b5 && b6 && b7 && b8 && b9
                   && b10 && b11 && b12 && b13 && b14 && b15;

        }

        return false;

    }

    /**
     * Creates a clone of the plot.
     * 
     * @return A clone.
     * 
     * @throws CloneNotSupportedException if some component of the plot does not support cloning.
     */
    protected Object clone() throws CloneNotSupportedException {
        
        Plot clone = (Plot) super.clone();
        //private Plot parent <-- don't clone the parent plot
        clone.datasetGroup = (DatasetGroup) ObjectUtils.clone(this.datasetGroup);
        //private String noDataMessage <-- immutable
        //private Font noDataMessageFont <-- immutable
        //private transient Paint noDataMessagePaint <-- immutable
        //private Insets insets <-- immutable
        //private transient Stroke outlineStroke <-- immutable
        //private transient Paint outlinePaint <-- immutable
        //private transient Paint backgroundPaint <-- immutable
        //private transient Image backgroundImage <-- ???
        //private int backgroundImageAlignment<-- primitive
        //private float foregroundAlpha <-- primitive
        //private float backgroundAlpha <-- primitive
        clone.drawingSupplier = (DrawingSupplier) ObjectUtils.clone(this.drawingSupplier);
        //private transient EventListenerList listenerList <-- ???
        //private double dataAreaRatio <-- primitive
        return clone;
    
    }
    
    /**
     * Provides serialization support.
     *
     * @param stream  the output stream.
     *
     * @throws IOException  if there is an I/O error.
     */
    private void writeObject(ObjectOutputStream stream) throws IOException {
        stream.defaultWriteObject();
        SerialUtilities.writePaint(this.noDataMessagePaint, stream);
        SerialUtilities.writeStroke(this.outlineStroke, stream);
        SerialUtilities.writePaint(this.outlinePaint, stream);
        // backgroundImage
        SerialUtilities.writePaint(this.backgroundPaint, stream);
    }

    /**
     * Provides serialization support.
     *
     * @param stream  the input stream.
     *
     * @throws IOException  if there is an I/O error.
     * @throws ClassNotFoundException  if there is a classpath problem.
     */
    private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
        stream.defaultReadObject();
        this.noDataMessagePaint = SerialUtilities.readPaint(stream);
        this.outlineStroke = SerialUtilities.readStroke(stream);
        this.outlinePaint = SerialUtilities.readPaint(stream);
        // backgroundImage
        this.backgroundPaint = SerialUtilities.readPaint(stream);

        this.listenerList = new EventListenerList();

    }
    
    /**
     * Resolves a domain axis location for a given plot orientation.
     * 
     * @param location  the location.
     * @param orientation  the orientation.
     * 
     * @return The edge for the domain axis.
     */
    public static RectangleEdge resolveDomainAxisLocation(AxisLocation location, 
                                                          PlotOrientation orientation) {
        RectangleEdge result = null;
        if (location == AxisLocation.TOP_OR_RIGHT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.RIGHT;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.TOP;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.TOP_OR_LEFT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.LEFT;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.TOP;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.BOTTOM_OR_RIGHT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.RIGHT;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.BOTTOM;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.BOTTOM_OR_LEFT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.LEFT;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.BOTTOM;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        return result;
    }

    /**
     * Resolves a domain axis location for a given plot orientation.
     * 
     * @param location  the location.
     * @param orientation  the orientation.
     * 
     * @return The edge for the domain axis.
     */
    public static RectangleEdge resolveRangeAxisLocation(AxisLocation location, 
                                                         PlotOrientation orientation) {
        RectangleEdge result = null;
        if (location == AxisLocation.TOP_OR_RIGHT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.TOP;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.RIGHT;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.TOP_OR_LEFT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.TOP;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.LEFT;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.BOTTOM_OR_RIGHT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.BOTTOM;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.RIGHT;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        else if (location == AxisLocation.BOTTOM_OR_LEFT) {
            if (orientation == PlotOrientation.HORIZONTAL) {
                result = RectangleEdge.BOTTOM;
            }
            else if (orientation == PlotOrientation.VERTICAL) {
                result = RectangleEdge.LEFT;
            }
            else {
                throw new IllegalStateException("XYPlot.resolveDomainAxisLocation(...)");
            }
        }
        return result;
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉国产在线观看软件| 麻豆视频一区二区| 成人av电影免费观看| 精品日韩99亚洲| 另类成人小视频在线| 欧美一区日韩一区| 亚洲国产日韩在线一区模特| 99re这里都是精品| 国产精品国产自产拍高清av | 欧美视频中文一区二区三区在线观看| 国产色91在线| 成人午夜激情视频| 亚洲少妇30p| 欧美日韩视频在线观看一区二区三区 | 国产一区二区三区日韩| 精品日韩在线一区| 精品视频在线看| 亚洲欧美日韩国产一区二区三区 | 欧美精品一区二区三区在线 | 欧美午夜片在线观看| 热久久久久久久| 久久看人人爽人人| 9l国产精品久久久久麻豆| 亚洲精品视频在线观看网站| 欧美又粗又大又爽| 美女在线一区二区| 国产精品丝袜在线| 欧美日韩一区二区电影| 捆绑调教美女网站视频一区| 国产日产精品一区| 欧美最猛性xxxxx直播| 久久99久久久久久久久久久| 久久你懂得1024| 欧美中文字幕一二三区视频| 久久机这里只有精品| 成人免费在线观看入口| 欧美美女激情18p| 国产99久久久国产精品潘金网站| 亚洲乱码一区二区三区在线观看| 在线播放日韩导航| av一二三不卡影片| 日韩avvvv在线播放| 国产精品妹子av| 日韩欧美一区二区不卡| 99热99精品| 国产自产v一区二区三区c| 亚洲福利一二三区| 亚洲欧美视频在线观看视频| 日韩精品一区在线观看| 久久品道一品道久久精品| 在线观看视频91| 不卡一二三区首页| 国产成人综合自拍| 精彩视频一区二区三区| 日韩一区精品视频| 日韩精品一二三| 亚洲成人av中文| 亚洲成av人在线观看| 亚洲精品写真福利| 一区精品在线播放| 国产精品欧美一级免费| 久久青草欧美一区二区三区| 精品奇米国产一区二区三区| 日韩一级成人av| 日韩免费电影网站| 久久这里只有精品首页| 欧美本精品男人aⅴ天堂| 91精品福利在线一区二区三区| 欧美浪妇xxxx高跟鞋交| 7777精品久久久大香线蕉| 精品视频999| 欧美剧情片在线观看| 欧美三级欧美一级| 91精品国产91久久久久久最新毛片| 欧美精品成人一区二区三区四区| 欧美日韩大陆在线| 日韩欧美的一区| 中文字幕av一区二区三区免费看| 国产精品欧美一级免费| 玉米视频成人免费看| 亚洲成人久久影院| 久久国产婷婷国产香蕉| 国产一区亚洲一区| 97国产一区二区| 欧美精选一区二区| 久久男人中文字幕资源站| 国产精品系列在线| 香蕉成人伊视频在线观看| 国产一区二区中文字幕| 成人开心网精品视频| 欧美性色aⅴ视频一区日韩精品| 欧美一级片在线看| 综合久久久久久久| 激情综合网激情| 一本大道久久a久久综合| 最新热久久免费视频| 一区二区三区欧美视频| 久久99精品久久久久久国产越南| 成人视屏免费看| 欧美刺激脚交jootjob| 亚洲色图一区二区| 91精品国产日韩91久久久久久| 国产精品免费人成网站| 日本成人在线看| 91原创在线视频| 久久久久国产精品麻豆ai换脸 | 6080日韩午夜伦伦午夜伦| 国产肉丝袜一区二区| 日韩精品免费专区| 欧美日韩在线精品一区二区三区激情 | 国产麻豆视频一区二区| 欧美老女人在线| 亚洲国产一区在线观看| 99久久免费精品高清特色大片| 欧美大片一区二区| 蜜臀av在线播放一区二区三区| 欧美在线高清视频| 亚洲精品伦理在线| 99视频有精品| 亚洲日本电影在线| 风流少妇一区二区| 日本一区二区电影| 高清在线成人网| 亚洲国产精品高清| www.成人网.com| 成人免费在线观看入口| 91毛片在线观看| 亚洲高清视频中文字幕| 欧美在线不卡一区| 国产福利一区在线观看| 久久久国产精华| 成人精品视频一区二区三区尤物| 国产精品免费观看视频| 一本大道久久a久久精二百| 亚洲狠狠爱一区二区三区| 欧美在线三级电影| 日韩va欧美va亚洲va久久| 久久女同精品一区二区| bt欧美亚洲午夜电影天堂| 亚洲美女免费视频| 337p亚洲精品色噜噜| 国产剧情在线观看一区二区| 日本一区二区三区四区| 91精品办公室少妇高潮对白| 亚洲国产精品久久久久秋霞影院 | 国产亚洲人成网站| 93久久精品日日躁夜夜躁欧美| 亚洲一区二区黄色| 精品99999| 一本大道av伊人久久综合| 日韩精品一区二区三区在线播放| 高清免费成人av| 亚洲一区二区视频在线观看| 91精品啪在线观看国产60岁| 国产成人在线视频播放| 亚洲精品高清在线观看| 成人免费视频国产在线观看| 亚洲成在人线在线播放| 日本一区二区三级电影在线观看| 日韩亚洲欧美成人一区| 4438x成人网最大色成网站| 在线精品视频小说1| 91美女片黄在线观看91美女| 99精品久久99久久久久| 国产高清久久久久| 国产一区二区视频在线播放| 久久精品国产第一区二区三区| 日本不卡在线视频| 欧美aaa在线| 激情图区综合网| 国产成a人亚洲| 99精品久久只有精品| 色综合色狠狠天天综合色| 色综合天天综合网天天狠天天| 色综合天天综合网国产成人综合天 | 亚洲天堂网中文字| 亚洲国产视频a| 九九热在线视频观看这里只有精品| 麻豆成人av在线| 成人一区二区三区中文字幕| av一二三不卡影片| 欧美日韩国产在线观看| 日韩女优毛片在线| 日韩美女视频一区| 日韩二区三区四区| 成人免费av在线| 欧美丰满高潮xxxx喷水动漫| 久久久亚洲欧洲日产国码αv| 国产精品国产三级国产有无不卡 | 午夜视频在线观看一区二区 | 亚洲同性同志一二三专区| 一区二区三区 在线观看视频| 免费成人在线网站| a在线欧美一区| 日韩视频一区在线观看| 国产精品夫妻自拍| 久久国产欧美日韩精品| 一本一本大道香蕉久在线精品| 欧美成人性战久久| 亚洲第一狼人社区|