categoryaxis.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 1,046 行 · 第 1/3 页

JAVA
1,046
字号
     * {@link AxisChangeEvent} to all registered listeners.     *      * @param category  the category (<code>null<code> not permitted).     */    public void removeCategoryLabelToolTip(Comparable category) {        if (category == null) {            throw new IllegalArgumentException("Null 'category' argument.");           }        this.categoryLabelToolTips.remove(category);           notifyListeners(new AxisChangeEvent(this));    }        /**     * Clears the category label tooltips and sends an {@link AxisChangeEvent}      * to all registered listeners.     */    public void clearCategoryLabelToolTips() {        this.categoryLabelToolTips.clear();        notifyListeners(new AxisChangeEvent(this));    }        /**     * Returns the Java 2D coordinate for a category.     *      * @param anchor  the anchor point.     * @param category  the category index.     * @param categoryCount  the category count.     * @param area  the data area.     * @param edge  the location of the axis.     *      * @return The coordinate.     */    public double getCategoryJava2DCoordinate(CategoryAnchor anchor,                                               int category,                                               int categoryCount,                                               Rectangle2D area,                                              RectangleEdge edge) {            double result = 0.0;        if (anchor == CategoryAnchor.START) {            result = getCategoryStart(category, categoryCount, area, edge);        }        else if (anchor == CategoryAnchor.MIDDLE) {            result = getCategoryMiddle(category, categoryCount, area, edge);        }        else if (anchor == CategoryAnchor.END) {            result = getCategoryEnd(category, categoryCount, area, edge);        }        return result;                                                          }                                                  /**     * Returns the starting coordinate for the specified category.     *     * @param category  the category.     * @param categoryCount  the number of categories.     * @param area  the data area.     * @param edge  the axis location.     *     * @return The coordinate.     */    public double getCategoryStart(int category, int categoryCount,                                    Rectangle2D area,                                   RectangleEdge edge) {        double result = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            result = area.getX() + area.getWidth() * getLowerMargin();        }        else if ((edge == RectangleEdge.LEFT)                 || (edge == RectangleEdge.RIGHT)) {            result = area.getMinY() + area.getHeight() * getLowerMargin();        }        double categorySize = calculateCategorySize(categoryCount, area, edge);        double categoryGapWidth = calculateCategoryGapSize(            categoryCount, area, edge         );        result = result + category * (categorySize + categoryGapWidth);        return result;    }    /**     * Returns the middle coordinate for the specified category.     *     * @param category  the category.     * @param categoryCount  the number of categories.     * @param area  the data area.     * @param edge  the axis location.     *     * @return The coordinate.     */    public double getCategoryMiddle(int category, int categoryCount,                                     Rectangle2D area, RectangleEdge edge) {        return getCategoryStart(category, categoryCount, area, edge)               + calculateCategorySize(categoryCount, area, edge) / 2;    }    /**     * Returns the end coordinate for the specified category.     *     * @param category  the category.     * @param categoryCount  the number of categories.     * @param area  the data area.     * @param edge  the axis location.     *     * @return The coordinate.     */    public double getCategoryEnd(int category, int categoryCount,                                  Rectangle2D area, RectangleEdge edge) {        return getCategoryStart(category, categoryCount, area, edge)               + calculateCategorySize(categoryCount, area, edge);    }    /**     * Calculates the size (width or height, depending on the location of the      * axis) of a category.     *     * @param categoryCount  the number of categories.     * @param area  the area within which the categories will be drawn.     * @param edge  the axis location.     *     * @return The category size.     */    protected double calculateCategorySize(int categoryCount, Rectangle2D area,                                           RectangleEdge edge) {        double result = 0.0;        double available = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            available = area.getWidth();        }        else if ((edge == RectangleEdge.LEFT)                 || (edge == RectangleEdge.RIGHT)) {            available = area.getHeight();        }        if (categoryCount > 1) {            result = available * (1 - getLowerMargin() - getUpperMargin()                      - getCategoryMargin());            result = result / categoryCount;        }        else {            result = available * (1 - getLowerMargin() - getUpperMargin());        }        return result;    }    /**     * Calculates the size (width or height, depending on the location of the      * axis) of a category gap.     *     * @param categoryCount  the number of categories.     * @param area  the area within which the categories will be drawn.     * @param edge  the axis location.     *     * @return The category gap width.     */    protected double calculateCategoryGapSize(int categoryCount,                                               Rectangle2D area,                                              RectangleEdge edge) {        double result = 0.0;        double available = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            available = area.getWidth();        }        else if ((edge == RectangleEdge.LEFT)                 || (edge == RectangleEdge.RIGHT)) {            available = area.getHeight();        }        if (categoryCount > 1) {            result = available * getCategoryMargin() / (categoryCount - 1);        }        return result;    }    /**     * Estimates the space required for the axis, given a specific drawing area.     *     * @param g2  the graphics device (used to obtain font information).     * @param plot  the plot that the axis belongs to.     * @param plotArea  the area within which the axis should be drawn.     * @param edge  the axis location (top or bottom).     * @param space  the space already reserved.     *     * @return The space required to draw the axis.     */    public AxisSpace reserveSpace(Graphics2D g2, Plot plot,                                   Rectangle2D plotArea,                                   RectangleEdge edge, AxisSpace space) {        // create a new space object if one wasn't supplied...        if (space == null) {            space = new AxisSpace();        }                // if the axis is not visible, no additional space is required...        if (!isVisible()) {            return space;        }        // calculate the max size of the tick labels (if visible)...        double tickLabelHeight = 0.0;        double tickLabelWidth = 0.0;        if (isTickLabelsVisible()) {            g2.setFont(getTickLabelFont());            AxisState state = new AxisState();            refreshTicks(g2, state, plotArea, edge);            if (edge == RectangleEdge.TOP) {                tickLabelHeight = state.getMax();            }            else if (edge == RectangleEdge.BOTTOM) {                tickLabelHeight = state.getMax();            }            else if (edge == RectangleEdge.LEFT) {                tickLabelWidth = state.getMax();             }            else if (edge == RectangleEdge.RIGHT) {                tickLabelWidth = state.getMax();             }        }                // get the axis label size and update the space object...        Rectangle2D labelEnclosure = getLabelEnclosure(g2, edge);        double labelHeight = 0.0;        double labelWidth = 0.0;        if (RectangleEdge.isTopOrBottom(edge)) {            labelHeight = labelEnclosure.getHeight();            space.add(                labelHeight + tickLabelHeight                 + this.categoryLabelPositionOffset, edge            );        }        else if (RectangleEdge.isLeftOrRight(edge)) {            labelWidth = labelEnclosure.getWidth();            space.add(                labelWidth + tickLabelWidth + this.categoryLabelPositionOffset,                 edge            );        }        return space;    }    /**     * Configures the axis against the current plot.     */    public void configure() {        // nothing required    }    /**     * Draws the axis on a Java 2D graphics device (such as the screen or a      * printer).     *     * @param g2  the graphics device (<code>null</code> not permitted).     * @param cursor  the cursor location.     * @param plotArea  the area within which the axis should be drawn      *                  (<code>null</code> not permitted).     * @param dataArea  the area within which the plot is being drawn      *                  (<code>null</code> not permitted).     * @param edge  the location of the axis (<code>null</code> not permitted).     * @param plotState  collects information about the plot      *                   (<code>null</code> permitted).     *      * @return The axis state (never <code>null</code>).     */    public AxisState draw(Graphics2D g2,                           double cursor,                           Rectangle2D plotArea,                           Rectangle2D dataArea,                          RectangleEdge edge,                          PlotRenderingInfo plotState) {                // if the axis is not visible, don't draw it...        if (!isVisible()) {            return new AxisState(cursor);        }                if (isAxisLineVisible()) {            drawAxisLine(g2, cursor, dataArea, edge);        }        // draw the category labels and axis label        AxisState state = new AxisState(cursor);        state = drawCategoryLabels(g2, dataArea, edge, state, plotState);        state = drawLabel(getLabel(), g2, plotArea, dataArea, edge, state);            return state;    }    /**     * Draws the category labels and returns the updated axis state.     *     * @param g2  the graphics device (<code>null</code> not permitted).     * @param dataArea  the area inside the axes (<code>null</code> not      *                  permitted).     * @param edge  the axis location (<code>null</code> not permitted).     * @param state  the axis state (<code>null</code> not permitted).     * @param plotState  collects information about the plot (<code>null</code>     *                   permitted).     *      * @return The updated axis state (never <code>null</code>).     */    protected AxisState drawCategoryLabels(Graphics2D g2,                                           Rectangle2D dataArea,                                           RectangleEdge edge,                                           AxisState state,                                           PlotRenderingInfo plotState) {        if (state == null) {            throw new IllegalArgumentException("Null 'state' argument.");        }        if (isTickLabelsVisible()) {            g2.setFont(getTickLabelFont());            g2.setPaint(getTickLabelPaint());            List ticks = refreshTicks(g2, state, dataArea, edge);            state.setTicks(ticks);                              int categoryIndex = 0;            Iterator iterator = ticks.iterator();            while (iterator.hasNext()) {                                CategoryTick tick = (CategoryTick) iterator.next();                g2.setPaint(getTickLabelPaint());                CategoryLabelPosition position                     = this.categoryLabelPositions.getLabelPosition(edge);                double x0 = 0.0;                double x1 = 0.0;                double y0 = 0.0;                double y1 = 0.0;                if (edge == RectangleEdge.TOP) {                    x0 = getCategoryStart(

⌨️ 快捷键说明

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