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

📄 categoryaxis.java

📁 jfreechart安装程序和使用说明
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
     * @param edge  the location of the axis.
     * 
     * @return A list of ticks.
     */
    public List refreshTicks(Graphics2D g2, 
                             AxisState state,
                             Rectangle2D plotArea, 
                             Rectangle2D dataArea,
                             RectangleEdge edge) {

        List ticks = new java.util.ArrayList();
        
        // sanity check for data area...
        if (dataArea.getHeight() <= 0.0 || dataArea.getWidth() < 0.0) {
            return ticks;
        }

        CategoryPlot plot = (CategoryPlot) getPlot();
        List categories = plot.getCategories();
        double max = 0.0;
                
        if (categories != null) {
            CategoryLabelPosition position = this.categoryLabelPositions.getLabelPosition(edge);
            float r = this.maxCategoryLabelWidthRatio;
            if (r <= 0.0) {
                r = position.getWidthRatio();   
            }
                  
            float l = 0.0f;
            if (position.getWidthType() == CategoryLabelWidthType.CATEGORY) {
                l = (float) calculateCategorySize(categories.size(), dataArea, edge);  
            }
            else {
                if (RectangleEdge.isLeftOrRight(edge)) {
                    l = (float) dataArea.getWidth();   
                }
                else {
                    l = (float) dataArea.getHeight();   
                }
            }
            int categoryIndex = 0;
            Iterator iterator = categories.iterator();
            while (iterator.hasNext()) {
                Comparable category = (Comparable) iterator.next();
                TextBlock label = createLabel(category, l * r, edge, g2);
                if (edge == RectangleEdge.TOP || edge == RectangleEdge.BOTTOM) {
                    max = Math.max(max, calculateTextBlockHeight(label, position, g2));
                }
                else if (edge == RectangleEdge.LEFT || edge == RectangleEdge.RIGHT) {
                    max = Math.max(max, calculateTextBlockWidth(label, position, g2));
                }
                Tick tick = new CategoryTick(
                    category, label, 
                    position.getLabelAnchor(), position.getRotationAnchor(), position.getAngle()
                );
                ticks.add(tick);
                categoryIndex = categoryIndex + 1;
            }
        }
        state.setMax(max);
        return ticks;
        
    }

    /**
     * Creates a label.
     *
     * @param category  the category.
     * @param width  the available width. 
     * @param edge  the edge on which the axis appears.
     * @param g2  the graphics device.
     *
     * @return a label.
     */
    protected TextBlock createLabel(Comparable category, float width, 
                                    RectangleEdge edge, Graphics2D g2) {
        TextBlock label = TextUtilities.createTextBlock(
            category.toString(), getTickLabelFont(), getTickLabelPaint(), 
            width, this.maxCategoryLabelLines, new G2TextMeasurer(g2)
        );  
        return label; 
    }
    
    /**
     * A utility method for determining the width of a text block.
     *
     * @param block  the text block.
     * @param position  the position.
     * @param g2  the graphics device.
     *
     * @return the width.
     */
    protected double calculateTextBlockWidth(TextBlock block, 
                                             CategoryLabelPosition position, 
                                             Graphics2D g2) {
                                                    
        Insets insets = getTickLabelInsets();
        Size2D size = block.calculateDimensions(g2);
        Rectangle2D box = new Rectangle2D.Double(0.0, 0.0, size.getWidth(), size.getHeight());
        Shape rotatedBox = ShapeUtils.rotateShape(box, position.getAngle(), 0.0f, 0.0f);
        double w = rotatedBox.getBounds2D().getWidth() + insets.top + insets.bottom;
        return w;
        
    }

    /**
     * A utility method for determining the height of a text block.
     *
     * @param block  the text block.
     * @param position  the label position.
     * @param g2  the graphics device.
     *
     * @return the height.
     */
    protected double calculateTextBlockHeight(TextBlock block, 
                                              CategoryLabelPosition position, 
                                              Graphics2D g2) {
                                                    
        Insets insets = getTickLabelInsets();
        Size2D size = block.calculateDimensions(g2);
        Rectangle2D box = new Rectangle2D.Double(0.0, 0.0, size.getWidth(), size.getHeight());
        Shape rotatedBox = ShapeUtils.rotateShape(box, position.getAngle(), 0.0f, 0.0f);
        double h = rotatedBox.getBounds2D().getHeight() + insets.top + insets.bottom;
        return h;
        
    }

    /**
     * Creates a clone of the axis.
     * 
     * @return a clone.
     * 
     * @throws CloneNotSupportedException if some component of the axis does not support cloning.
     */
    public Object clone() throws CloneNotSupportedException {
    
        Object clone = super.clone();
        return clone;
            
    }
    
    /**
     * Tests this axis for equality with an arbitrary object.
     *
     * @param obj  the object (<code>null</code> permitted).
     *
     * @return a boolean.
     */
    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof CategoryAxis && super.equals(obj)) {
            CategoryAxis axis = (CategoryAxis) obj;
            boolean b0 = (axis.lowerMargin == this.lowerMargin);
            boolean b1 = (axis.upperMargin == this.upperMargin);
            boolean b2 = (axis.categoryMargin == this.categoryMargin);
            boolean b3 = (axis.maxCategoryLabelWidthRatio == this.maxCategoryLabelWidthRatio);
            boolean b4 = (axis.categoryLabelPositionOffset == this.categoryLabelPositionOffset);
            boolean b5 = ObjectUtils.equal(
                axis.categoryLabelPositions, this.categoryLabelPositions
            );
            boolean b6 = ObjectUtils.equal(
                axis.categoryLabelToolTips, this.categoryLabelToolTips
            );
            return b0 && b1 && b2 && b3 && b4 && b5 && b6;
        }
        return false;
    }

    /**
     * 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();
    }

    /**
     * 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();
    }
    
    //// DEPRECATED CODE ////////////////////////////////////////////////////////////

    /**
     * Returns a flag indicating whether the category labels are rotated to vertical.
     *
     * @return The flag.
     * 
     * @deprecated Use the get/setXXXCategoryLabelPosition methods.
     */
    public boolean isVerticalCategoryLabels() {
        return false;
    }

    /**
     * Sets the flag that determines whether the category labels are rotated to vertical.
     *
     * @param flag  the flag.
     * 
     * @deprecated Use the get/setXXXCategoryLabelPosition methods.
     */
    public void setVerticalCategoryLabels(boolean flag) {

        if (flag) {
            this.categoryLabelPositions = CategoryLabelPositions.UP_90;
        }
        else {
            this.categoryLabelPositions = CategoryLabelPositions.STANDARD;
        }
        notifyListeners(new AxisChangeEvent(this));

    }

    /**
     * Returns the flag that determines whether the category labels are to be
     * skipped to avoid overlapping.
     *
     * @return The flag.
     * 
     * @deprecated No longer supported.
     */
    public boolean getSkipCategoryLabelsToFit() {
        return false;
    }

    /**
     * Sets the flag that determines whether the category labels are to be
     * skipped to avoid overlapping.
     *
     * @param flag  the new value of the flag.
     * 
     * @deprecated No longer supported.
     */
    public void setSkipCategoryLabelsToFit(boolean flag) {
        // not supported any more
    }

    /**
     * Returns the category label positioning info that applies when the axis is displayed
     * at the top of the plot area.
     * 
     * @return the position info.
     * 
     * @deprecated Use getCategoryLabelPositions().getLabelPosition(RectangleEdge.TOP).
     */
    public CategoryLabelPosition getTopCategoryLabelPosition() {
        return getCategoryLabelPositions().getLabelPosition(RectangleEdge.TOP);
    }
    
    /**
     * Sets the position info that applies when the axis is displayed at the top of the 
     * plot area.
     * 
     * @param position  the position info.
     * 
     * @deprecated Use setCategoryLabelPositions(...).
     */
    public void setTopCategoryLabelPosition(CategoryLabelPosition position) {
        setCategoryLabelPositions(new CategoryLabelPositions(
                position,
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.BOTTOM),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.LEFT),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.RIGHT)
        )
        );
    }

    /**
     * Returns the category label positioning info that applies when the axis is displayed
     * at the bottom of the plot area.
     * 
     * @return the position info.
     * 
     * @deprecated Use getCategoryLabelPositions().getLabelPosition(RectangleEdge.BOTTOM).
     */
    public CategoryLabelPosition getBottomCategoryLabelPosition() {
        return getCategoryLabelPositions().getLabelPosition(RectangleEdge.BOTTOM);
    }
    
    /**
     * Sets the position info that applies when the axis is displayed at the bottom of the 
     * plot area.
     * 
     * @param position  the position info.
     * 
     * @deprecated Use setCategoryLabelPositions(...).
     */
    public void setBottomCategoryLabelPosition(CategoryLabelPosition position) {
        setCategoryLabelPositions(new CategoryLabelPositions(
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.TOP),
                position,
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.LEFT),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.RIGHT)
        )
        );
    }

    /**
     * Returns the category label positioning info that applies when the axis is displayed
     * at the left of the plot area.
     * 
     * @return the position info.
     * 
     * @deprecated Use getCategoryLabelPositions().getLabelPosition(RectangleEdge.LEFT).
     */
    public CategoryLabelPosition getLeftCategoryLabelPosition() {
        return getCategoryLabelPositions().getLabelPosition(RectangleEdge.LEFT);
    }
    
    /**
     * Sets the position info that applies when the axis is displayed at the left of the 
     * plot area.
     * 
     * @param position  the position info.
     * 
     * @deprecated Use setCategoryLabelPositions(...).
     */
    public void setLeftCategoryLabelPosition(CategoryLabelPosition position) {
        setCategoryLabelPositions(new CategoryLabelPositions(
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.TOP),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.BOTTOM),
                position,
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.RIGHT)
        )
        );
    }

    /**
     * Returns the category label positioning info that applies when the axis is displayed
     * at the right of the plot area.
     * 
     * @return the position info.
     * 
     * @deprecated Use getCategoryLabelPositions().getLabelPosition(RectangleEdge.RIGHT).
     */
    public CategoryLabelPosition getRightCategoryLabelPosition() {
        return getCategoryLabelPositions().getLabelPosition(RectangleEdge.RIGHT);
    }
    
    /**
     * Sets the position info that applies when the axis is displayed at the right of the 
     * plot area.
     * 
     * @param position  the position info.
     * 
     * @deprecated Use setLabelPositions(...).
     */
    public void setRightCategoryLabelPosition(CategoryLabelPosition position) {
        setCategoryLabelPositions(new CategoryLabelPositions(
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.TOP),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.BOTTOM),
                this.categoryLabelPositions.getLabelPosition(RectangleEdge.LEFT),
                position
        )
        );
    }

}

⌨️ 快捷键说明

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