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

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

?? pieplot.java

?? Web圖形化的Java庫
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:

    /**
     * Initialisation shared by constructors.
     */
    private void initialise() {

        this.interiorGap = DEFAULT_INTERIOR_GAP;
        this.circular = true;
        this.radius = DEFAULT_RADIUS;
        this.startAngle = DEFAULT_START_ANGLE;
        this.direction = Rotation.CLOCKWISE;
        this.sectionLabelType = DEFAULT_SECTION_LABEL_TYPE;
        this.sectionLabelFont = DEFAULT_SECTION_LABEL_FONT;
        this.sectionLabelPaint = DEFAULT_SECTION_LABEL_PAINT;
        this.sectionLabelGap = DEFAULT_SECTION_LABEL_GAP;
        this.valueFormatter = DEFAULT_VALUE_FORMATTER;
        this.percentFormatter = DEFAULT_PERCENT_FORMATTER;
        this.itemLabelGenerator = null;
        this.urlGenerator = null;

        this.sectionPaint = null;
        this.sectionPaintList = new PaintList();
        this.sectionPaintListAutoFill = true;
        
        this.sectionOutlinePaint = Color.lightGray;
        this.sectionOutlinePaintList = new PaintList();
        this.sectionOutlinePaintListAutoFill = true;

        this.sectionOutlineStroke = new BasicStroke(1.0f);
        this.sectionOutlineStrokeList = new StrokeList();
        this.sectionOutlineStrokeListAutoFill = true;

        this.minimumArcAngleToDraw = DEFAULT_MINIMUM_ARC_ANGLE_TO_DRAW;
    }

    /**
     * Returns the dataset.
     * 
     * @return The dataset.
     */
    public PieDataset getDataset() {
        return this.dataset;
    }
    
    /**
     * Sets the dataset.  A {@link DatasetChangeEvent} is sent to all registered listeners.
     * 
     * @param dataset  the dataset.
     */
    public void setDataset(PieDataset dataset) {
        // if there is an existing dataset, remove the plot from the list of change listeners...
        PieDataset 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 for multiple pies.
     * 
     * @return The dataset.
     */
    public CategoryDataset getMultiDataset() {
        return this.multiDataset;
    }
    
    /**
     * Sets the dataset for multiplie pies.  A {@link DatasetChangeEvent} is sent to all 
     * registered listeners.
     * 
     * @param dataset  the dataset.
     */
    public void setMultiDataset(CategoryDataset dataset) {
        // if there is an existing dataset, remove the plot from the list of change listeners...
        CategoryDataset existing = this.multiDataset;
        if (existing != null) {
            existing.removeChangeListener(this);
        }

        // set the new dataset, and register the chart as a change listener...
        this.multiDataset = 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 start angle for the first pie section.
     * <P>
     * This is measured in degrees starting from 3 o'clock and measuring anti-clockwise.
     *
     * @return the start angle.
     */
    public double getStartAngle() {
        return this.startAngle;
    }

    /**
     * Sets the starting angle.
     * <P>
     * The initial default value is 90 degrees, which corresponds to 12 o'clock.  A value of zero
     * corresponds to 3 o'clock... this is the encoding used by Java's Arc2D class.
     *
     * @param angle  the angle (in degrees).
     */
    public void setStartAngle(double angle) {
        this.startAngle = angle;
        notifyListeners(new PlotChangeEvent(this));
    }

    /**
     * Returns the direction in which the pie sections are drawn (clockwise or anti-clockwise).
     *
     * @return The direction.
     */
    public Rotation getDirection() {
        return this.direction;
    }

    /**
     * Sets the direction (use the constants CLOCKWISE or ANTICLOCKWISE).
     *
     * @param direction  the new direction (<code>null</code> not permitted).
     */
    public void setDirection(Rotation direction) {

        // check argument...
        if (direction == null) {
            throw new IllegalArgumentException("PiePlot.setDirection(...): null not allowed.");
        }

        // make the change...
        this.direction = direction;
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Returns the interior gap, measured as a percentage of the available drawing space.
     *
     * @return The gap percentage.
     */
    public double getInteriorGap() {
        return this.interiorGap;
    }

    /**
     * Sets the interior gap.
     *
     * @param percent The gap.
     */
    public void setInteriorGap(double percent) {

        // check arguments...
        if ((percent < 0.0) || (percent > MAX_INTERIOR_GAP)) {
            throw new IllegalArgumentException(
                "PiePlot.setInteriorGapPercent(double): percentage outside valid range.");
        }

        // make the change...
        if (this.interiorGap != percent) {
            this.interiorGap = percent;
            notifyListeners(new PlotChangeEvent(this));
        }

    }

    /**
     * Returns a flag indicating whether the pie chart is circular, or
     * stretched into an elliptical shape.
     *
     * @return a flag indicating whether the pie chart is circular.
     */
    public boolean isCircular() {
        return circular;
    }

    /**
     * A flag indicating whether the pie chart is circular, or stretched into
     * an elliptical shape.
     *
     * @param flag  the new value.
     */
    public void setCircular(boolean flag) {

        // no argument checking required...
        // make the change...
        if (circular != flag) {
            circular = flag;
            notifyListeners(new PlotChangeEvent(this));
        }

    }

    /**
     * Sets the circular attribute, with no side effects.
     *
     * @param circular  the new value of the flag.
     */
    protected void setCircularAttribute(boolean circular) {
        this.circular = circular;
    }

    /**
     * Returns the radius (a percentage of the available space).
     *
     * @return The radius percentage.
     */
    public double getRadius() {
        return this.radius;
    }

    /**
     * Sets the radius.
     *
     * @param percent  the new value.
     */
    public void setRadius(double percent) {

        // check arguments...
        if ((percent <= 0.0) || (percent > MAX_RADIUS)) {
            throw new IllegalArgumentException(
                "PiePlot.setRadiusPercent(double): percentage outside valid range.");
        }

        // make the change (if necessary)...
        if (this.radius != percent) {
            this.radius = percent;
            notifyListeners(new PlotChangeEvent(this));
        }

    }

    /**
     * Returns the amount that a section should be 'exploded'.
     *
     * @param section  the section number.
     *
     * @return the amount that a section should be 'exploded'.
     */
    public double getExplodePercent(int section) {

        // check argument...
        if (section < 0) {
            throw new IllegalArgumentException(
                "PiePlot.getExplodePercent(int): section outside valid range.");
        }

        // fetch the result...
        double result = 0.0;

        if (this.explodePercentages != null) {
            Number percent = (Number) this.explodePercentages.get(section);
            if (percent != null) {
                result = percent.doubleValue();
            }
        }

        return result;

    }

    /**
     * Sets the amount that a pie section should be exploded.
     * <p>
     * If you want to display a pie chart with one or more exploded sections, you first need
     * to set the pie chart radius to something less than 100%.  Then, consider a circle that
     * represents a pie chart with the maximum radius (100%) and a smaller circle that is the
     * actual pie chart (with radius x%).  Now, the explode percent determines how far out
     * towards the outer circle the pie section is shifted (exploded).
     *
     * @param section  the section index.
     * @param percent  the amount to explode the section as a percentage.
     */
    public void setExplodePercent(int section, double percent) {

        // check argument...
        int keyCount = 0;
        Collection keys = getKeys();
        if (keys != null) {
            keyCount = keys.size();
        }
        if ((section < 0) || (section >= keyCount)) {
            throw new IllegalArgumentException(
                "PiePlot.setExplodePercent(int, double): section outside valid range.");
        }

        // store the value...
        if (this.explodePercentages == null) {
            this.explodePercentages = new ObjectList();
        }
        this.explodePercentages.set(section, new Double(percent));

    }

    /**
     * Returns the section label type.  Defined by the constants: NO_LABELS,
     * NAME_LABELS, PERCENT_LABELS and NAME_AND_PERCENT_LABELS.
     *
     * @return the section label type.
     */
    public int getSectionLabelType() {
        return this.sectionLabelType;
    }

    /**
     * Sets the section label type.
     * <P>
     * Valid types are defined by the following constants: NO_LABELS,
     * NAME_LABELS, VALUE_LABELS, PERCENT_LABELS, NAME_AND_VALUE_LABELS,
     * NAME_AND_PERCENT_LABELS, VALUE_AND_PERCENT_LABELS.
     *
     * @param type the type.
     */
    public void setSectionLabelType(int type) {

        // check the argument...
        if ((type != NO_LABELS)
            && (type != NAME_LABELS)
            && (type != VALUE_LABELS)
            && (type != PERCENT_LABELS)
            && (type != NAME_AND_VALUE_LABELS)
            && (type != NAME_AND_PERCENT_LABELS)
            && (type != VALUE_AND_PERCENT_LABELS)) {

            throw new IllegalArgumentException(
                "PiePlot.setSectionLabelType(int): unrecognised type.");

        }

        // make the change...
        if (sectionLabelType != type) {
            this.sectionLabelType = type;
            notifyListeners(new PlotChangeEvent(this));
        }

    }

    /**
     * Returns the section label font.
     *
     * @return the section label font.
     */
    public Font getSectionLabelFont() {
        return this.sectionLabelFont;
    }

    /**
     * Sets the section label font.
     * <P>
     * Notifies registered listeners that the plot has been changed.
     *
     * @param font  the new section label font.
     */
    public void setSectionLabelFont(Font font) {

        // check arguments...
        if (font == null) {
            throw new IllegalArgumentException(
                "PiePlot.setSectionLabelFont(...): null font not allowed.");
        }

        // make the change...
        if (!this.sectionLabelFont.equals(font)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
heyzo一本久久综合| 日本美女一区二区| 99久久精品国产毛片| 国产精品国产三级国产普通话蜜臀| 福利一区二区在线| 国产精品亲子乱子伦xxxx裸| a在线播放不卡| 一区二区三区高清| 欧美在线一二三| 奇米一区二区三区| 久久青草国产手机看片福利盒子| 国产成人在线网站| 亚洲欧美另类在线| 91精品国产综合久久小美女| 久久精品国产**网站演员| 2020国产精品| 99精品国产99久久久久久白柏| 亚洲精品成人在线| 日韩一区二区三区在线| 国产成人亚洲综合a∨婷婷图片| 国产精品剧情在线亚洲| 欧美日韩国产高清一区二区| 国产美女视频一区| 综合久久久久综合| 欧美日韩国产精品自在自线| 国产成人高清视频| 午夜精品福利久久久| 久久久www成人免费毛片麻豆| 色久优优欧美色久优优| 久久精品国产一区二区三| 国产精品卡一卡二卡三| 日韩一区二区三区免费看| 成人一道本在线| 久久精品国产一区二区| 亚洲精品一二三四区| 26uuu色噜噜精品一区二区| 91丨九色丨黑人外教| 国产在线视频一区二区三区| 亚洲一区二区av电影| 久久久精品国产免费观看同学| 欧美日韩色一区| av在线不卡网| 麻豆精品在线播放| 亚洲永久精品国产| 国产精品亲子乱子伦xxxx裸| 日韩欧美综合在线| 欧美影院午夜播放| 成人国产精品视频| 狠狠色伊人亚洲综合成人| 亚洲图片一区二区| 亚洲欧美偷拍另类a∨色屁股| 欧美大片日本大片免费观看| 欧美色网一区二区| 91在线看国产| 成人激情图片网| 国产福利视频一区二区三区| 免费精品视频在线| 午夜激情久久久| 亚洲一区二区三区四区五区黄| 国产精品丝袜在线| 国产亚洲成年网址在线观看| 欧美一区二区二区| 欧美狂野另类xxxxoooo| 色综合天天综合狠狠| 盗摄精品av一区二区三区| 国产精品亚洲专一区二区三区 | 一本大道av伊人久久综合| 激情六月婷婷久久| 老司机午夜精品| 男女男精品视频网| 男女男精品视频| 麻豆成人久久精品二区三区红 | 国产成人亚洲精品狼色在线| 精品一区二区三区免费| 精品无码三级在线观看视频| 奇米色一区二区| 久久99国产精品久久99| 久久国产婷婷国产香蕉| 美腿丝袜亚洲色图| 久久精品国产**网站演员| 狠狠色丁香久久婷婷综| 国模娜娜一区二区三区| 国内外成人在线| 成人一区在线观看| 91丨porny丨国产入口| 91黄视频在线观看| 欧美精品在欧美一区二区少妇| 欧美少妇xxx| 日韩欧美一级二级| 久久久www成人免费毛片麻豆| 国产欧美日韩另类一区| 国产精品国产三级国产有无不卡 | 一本大道av一区二区在线播放| 99久久99久久精品免费看蜜桃| 91欧美一区二区| 色视频一区二区| 91精品综合久久久久久| 日韩精品一区二区三区老鸭窝| 国产精品1区2区3区| 欧美亚洲一区二区在线观看| 成人福利电影精品一区二区在线观看| 精品在线一区二区三区| 国产精品一二三四五| 国产成人一级电影| 色综合久久综合| 欧美人与z0zoxxxx视频| 亚洲精品一区二区三区精华液| 国产日韩欧美亚洲| 亚洲美女免费在线| 老司机免费视频一区二区| 成人一区二区三区| 精品视频在线免费观看| 久久美女艺术照精彩视频福利播放| 国产目拍亚洲精品99久久精品| 亚洲品质自拍视频| 日本成人在线电影网| 成人小视频在线观看| 欧美在线不卡一区| 精品久久久久久无| 亚洲精品日产精品乱码不卡| 日本aⅴ亚洲精品中文乱码| 国产精品久久久久久久蜜臀| 蜜臀久久99精品久久久画质超高清| 黄色小说综合网站| 91黄色免费版| 久久久久国产免费免费| 亚洲成av人片在www色猫咪| 国产一区二区三区在线观看免费视频 | 91在线视频在线| 日韩精品最新网址| 一区二区三区四区在线| 国产乱码精品一区二区三区av | 国产一区在线观看视频| 欧美熟乱第一页| 国产欧美一区二区精品仙草咪| 午夜视频一区二区| 成人av资源下载| 精品国产一区二区三区不卡| 一区二区三区自拍| 国产一区二区美女诱惑| 欧美日韩一区视频| 亚洲国产精品激情在线观看| 免费成人性网站| 欧美亚洲国产bt| 综合久久久久综合| 国产精品夜夜嗨| 欧美成人女星排行榜| 视频在线观看一区| 欧美性色aⅴ视频一区日韩精品| 中文字幕欧美区| 国产乱子伦视频一区二区三区 | 国产精品久久久久7777按摩| 久久99国产精品免费| 91精品视频网| 老司机午夜精品| 欧美美女一区二区在线观看| 亚洲你懂的在线视频| 91同城在线观看| 国产精品黄色在线观看| 国内成人免费视频| 日韩三级视频在线看| 日韩在线一二三区| 欧美性猛交xxxx乱大交退制版 | 青青草精品视频| 欧美久久高跟鞋激| 无码av中文一区二区三区桃花岛| 91久久线看在观草草青青| 综合久久久久久久| 91美女福利视频| 亚洲激情在线播放| 欧美在线不卡视频| 日韩主播视频在线| 欧美成人国产一区二区| 国产精品一区二区免费不卡| 国产片一区二区| 成人h动漫精品一区二| 亚洲三级在线看| 91国内精品野花午夜精品 | 日韩三级免费观看| 精品一区二区日韩| 日本一区二区综合亚洲| 99久免费精品视频在线观看 | 国产亚洲欧美激情| 风间由美一区二区av101| 国产精品美女视频| 91网站在线播放| 午夜精品久久久久久久久久| 欧美成人精品福利| 国产成人精品免费视频网站| 亚洲视频免费看| 欧美精品一级二级| 国产一区二区三区| 亚洲激情男女视频| 欧美电影一区二区三区| 国产精品66部| 一区二区不卡在线播放| 欧美一区二区大片| 波多野结衣中文字幕一区二区三区| 亚洲精品日产精品乱码不卡| 日韩欧美卡一卡二|