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

📄 dateaxis.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            FontMetrics fm = g2.getFontMetrics(tickLabelFont);            double w1 = fm.stringWidth(lowerStr);            double w2 = fm.stringWidth(upperStr);            result += Math.max(w1, w2);        }        return result;    }    /**     * Estimates the maximum width of the tick labels, assuming the specified tick unit is used.     * <P>     * Rather than computing the string bounds of every tick on the axis, we just look at two     * values: the lower bound and the upper bound for the axis.  These two values will usually     * be representative.     *     * @param g2  the graphics device.     * @param unit  the tick unit to use for calculation.     *     * @return the estimated maximum width of the tick labels.     */    private double estimateMaximumTickLabelHeight(Graphics2D g2, DateTickUnit unit) {        Insets tickLabelInsets = getTickLabelInsets();        double result = tickLabelInsets.top + tickLabelInsets.bottom;        Font tickLabelFont = getTickLabelFont();        FontRenderContext frc = g2.getFontRenderContext();        LineMetrics lm = tickLabelFont.getLineMetrics("ABCxyz", frc);        if (!isVerticalTickLabels()) {            // all tick labels have the same width (equal to the height of the font)...            result += lm.getHeight();        }        else {            // look at lower and upper bounds...            DateRange range = (DateRange) getRange();            Date lower = range.getLowerDate();            Date upper = range.getUpperDate();            String lowerStr = null;            String upperStr = null;            DateFormat formatter = getDateFormatOverride();            if (formatter != null) {                lowerStr = formatter.format(lower);                upperStr = formatter.format(upper);            }            else {                lowerStr = unit.dateToString(lower);                upperStr = unit.dateToString(upper);            }            FontMetrics fm = g2.getFontMetrics(tickLabelFont);            double w1 = fm.stringWidth(lowerStr);            double w2 = fm.stringWidth(upperStr);            result += Math.max(w1, w2);        }        return result;    }    /**     * Calculates the positions of the tick labels for the axis, storing the results in the     * tick label list (ready for drawing).     *     * @param g2  the graphics device.     * @param state  the axis state.     * @param plotArea  the area in which the plot and the axes should be drawn.     * @param dataArea  the area in which the plot should be drawn.     * @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 result = null;        if (RectangleEdge.isTopOrBottom(edge)) {            result = refreshTicksHorizontal(g2, state.getCursor(), plotArea, dataArea, edge);        }        else if (RectangleEdge.isLeftOrRight(edge)) {            result = refreshTicksVertical(g2, state.getCursor(), plotArea, dataArea, edge);        }        return result;    }    /**     * Recalculates the ticks for the date axis.     *     * @param g2  the graphics device.     * @param cursor  the cursor location.     * @param plotArea  the area in which the axes and data are to be drawn.     * @param dataArea  the area in which the data is to be drawn.     * @param edge  the location of the axis.     *     * @return A list of ticks.     */    public List refreshTicksHorizontal(Graphics2D g2,                                       double cursor,                                       Rectangle2D plotArea,                                       Rectangle2D dataArea,                                       RectangleEdge edge) {        List result = new java.util.ArrayList();        Font tickLabelFont = getTickLabelFont();        g2.setFont(tickLabelFont);        if (isAutoTickUnitSelection()) {            selectAutoTickUnit(g2, plotArea, dataArea, edge);        }        DateTickUnit unit = getTickUnit();        Date tickDate = calculateLowestVisibleTickValue(unit);        Date upperDate = getMaximumDate();        // float lastX = Float.MIN_VALUE;        while (tickDate.before(upperDate)) {            if (!isHiddenValue(tickDate.getTime())) {                // work out the value, label and position                String tickLabel;                DateFormat formatter = getDateFormatOverride();                if (formatter != null) {                    tickLabel = formatter.format(tickDate);                }                else {                    tickLabel = this.tickUnit.dateToString(tickDate);                }                TextAnchor anchor = null;                TextAnchor rotationAnchor = null;                double angle = 0.0;                if (isVerticalTickLabels()) {                    anchor = TextAnchor.CENTER_RIGHT;                    rotationAnchor = TextAnchor.CENTER_RIGHT;                    if (edge == RectangleEdge.TOP) {                        angle = Math.PI / 2.0;                    }                    else {                        angle = -Math.PI / 2.0;                    }                }                else {                    if (edge == RectangleEdge.TOP) {                        anchor = TextAnchor.BOTTOM_CENTER;                        rotationAnchor = TextAnchor.BOTTOM_CENTER;                    }                    else {                        anchor = TextAnchor.TOP_CENTER;                        rotationAnchor = TextAnchor.TOP_CENTER;                    }                }                Tick tick = new DateTick(tickDate, tickLabel, anchor, rotationAnchor, angle);                result.add(tick);                tickDate = unit.addToDate(tickDate);            }            else {                tickDate = unit.rollDate(tickDate);                continue;            }            // could add a flag to make the following correction optional...            switch (unit.getUnit()) {                case (DateTickUnit.MILLISECOND) :                case (DateTickUnit.SECOND) :                case (DateTickUnit.MINUTE) :                case (DateTickUnit.HOUR) :                case (DateTickUnit.DAY) :                    break;                case (DateTickUnit.MONTH) :                    tickDate = calculateDateForPosition(new Month(tickDate), this.tickMarkPosition);                    break;                case(DateTickUnit.YEAR) :                    tickDate = calculateDateForPosition(new Year(tickDate), this.tickMarkPosition);                    break;                default: break;            }        }        return result;    }    /**     * Recalculates the ticks for the date axis.     *     * @param g2  the graphics device.     * @param cursor  the cursor location.     * @param plotArea  the area in which the plot and the axes should be drawn.     * @param dataArea  the area in which the plot should be drawn.     * @param edge  the location of the axis.     *     * @return A list of ticks.     */    public List refreshTicksVertical(Graphics2D g2,                                     double cursor,                                     Rectangle2D plotArea,                                     Rectangle2D dataArea,                                     RectangleEdge edge) {        List result = new java.util.ArrayList();        Font tickLabelFont = getTickLabelFont();        g2.setFont(tickLabelFont);        if (isAutoTickUnitSelection()) {            selectAutoTickUnit(g2, plotArea, dataArea, edge);        }        DateTickUnit unit = getTickUnit();        Date tickDate = calculateLowestVisibleTickValue(unit);        //Date upperDate = calculateHighestVisibleTickValue(unit);        Date upperDate = getMaximumDate();        while (tickDate.before(upperDate)) {            if (!isHiddenValue(tickDate.getTime())) {                // work out the value, label and position                String tickLabel;                DateFormat formatter = getDateFormatOverride();                if (formatter != null) {                    tickLabel = formatter.format(tickDate);                }                else {                    tickLabel = this.tickUnit.dateToString(tickDate);                }                TextAnchor anchor = null;                TextAnchor rotationAnchor = null;                double angle = 0.0;                if (this.isVerticalTickLabels()) {                    anchor = TextAnchor.BOTTOM_CENTER;                    rotationAnchor = TextAnchor.BOTTOM_CENTER;                    if (edge == RectangleEdge.LEFT) {                        angle = -Math.PI / 2.0;                    }                    else {                        angle = Math.PI / 2.0;                    }                }                else {                    if (edge == RectangleEdge.LEFT) {                        anchor = TextAnchor.CENTER_RIGHT;                        rotationAnchor = TextAnchor.CENTER_RIGHT;                    }                    else {                        anchor = TextAnchor.CENTER_LEFT;                        rotationAnchor = TextAnchor.CENTER_LEFT;                    }                }                Tick tick = new DateTick(tickDate, tickLabel, anchor, rotationAnchor, angle);                result.add(tick);                tickDate = unit.addToDate(tickDate);            }            else {                tickDate = unit.rollDate(tickDate);            }        }        return result;    }    /**     * 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 axes and data should be drawn (<code>null</code>      *                  not permitted).     * @param dataArea  the area within which the data should be 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()) {            AxisState state = new AxisState(cursor);            // even though the axis is not visible, we need to refresh ticks in case the grid            // is being drawn...            List ticks = refreshTicks(g2, state, plotArea, dataArea, edge);            state.setTicks(ticks);            return state;        }        // draw the tick marks and labels...        AxisState state = drawTickMarksAndLabels(g2, cursor, plotArea, dataArea, edge);        // draw the axis label (note that 'state' is passed in *and* returned)...        state = drawLabel(getLabel(), g2, plotArea, dataArea, edge, state);        return state;    }    /**     * Zooms in on the current range.     *     * @param lowerPercent  the new lower bound.     * @param upperPercent  the new upper bound.     */    public void zoomRange(double lowerPercent, double upperPercent) {        double start = this.timeline.toTimelineValue(new Date((long) getRange().getLowerBound()));        double length = (this.timeline.toTimelineValue((long) getRange().getUpperBound())             - this.timeline.toTimelineValue((long) getRange().getLowerBound()));        Range adjusted = null;        if (isInverted()) {            adjusted = new DateRange(this.timeline.toMillisecond((long) (start +                (length * (1 - upperPercent)))),                this.timeline.toMillisecond((long)(start + (length * (1 - lowerPercent))))            );        }        else {            adjusted = new DateRange(this.timeline.toMillisecond(                (long) (start + length * lowerPercent)),                this.timeline.toMillisecond((long)(start + length * upperPercent))            );        }        setRange(adjusted);    }         /**     * Returns a clone of the object.     *     * @return A clone.     *     * @throws CloneNotSupportedException if some component of the axis does not support cloning.     */    public Object clone() throws CloneNotSupportedException {        DateAxis clone = (DateAxis) super.clone();        // 'dateTickUnit' is immutable : no need to clone        if (this.dateFormatOverride != null) {            clone.dateFormatOverride = (DateFormat) this.dateFormatOverride.clone();        }        // 'tickMarkPosition' is immutable : no need to clone        return clone;    }    //// DEPRECATED CODE //////////////////////////////////////////////////////////////////////////    /**     * Translates the data value to the display coordinates (Java 2D User Space)     * of the chart.     *     * @param value  the date to be plotted.     * @param area  the rectangle (in Java2D space) where the data is to be plotted.     * @param edge  the axis location.     *     * @return the coordinate corresponding to the supplied data value.     *      * @deprecated Use valueToJava2D instead.     */    public double translateValueToJava2D(double value, Rectangle2D area, RectangleEdge edge) {        return valueToJava2D(value, area, edge);    }        /**     * Translates a Java2D coordinate into the corresponding data value.  To perform this     * translation, you need to know the area used for plotting data, and which edge the     * axis is located on.     *     * @param java2DValue  the coordinate in Java2D space.     * @param area  the rectangle (in Java2D space) where the data is to be plotted.     * @param edge  the axis location.     *     * @return A data value.     *      * @deprecated Use java2DToValue instead.     */    public double translateJava2DToValue(double java2DValue, Rectangle2D area, RectangleEdge edge) {        return java2DToValue(java2DValue, area, edge);    }    /**     * Translates a date to Java2D coordinates, based on the range displayed by     * this axis for the specified data area.     *     * @param date  the date.     * @param area  the rectangle (in Java2D space) where the data is to be plotted.     * @param edge  the axis location.     *     * @return the coordinate corresponding to the supplied date.     *      * @deprecated Use dataToJava2D() instead.     */    public double translateDateToJava2D(Date date, Rectangle2D area, RectangleEdge edge) {        return dateToJava2D(date, area, edge);    }                   }

⌨️ 快捷键说明

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