Search in sources :

Example 26 with DateRange

use of org.jfree.data.time.DateRange in project seng438-a3-R41Ryan by seng438-winter-2022.

the class DateAxis method setMaximumDate.

/**
 * Sets the maximum date visible on the axis and sends an
 * {@link AxisChangeEvent} to all registered listeners.  If
 * <code>maximumDate</code> is on or before the current minimum date for
 * the axis, the minimum date will be shifted to preserve the current
 * length of the axis.
 *
 * @param maximumDate  the date (<code>null</code> not permitted).
 *
 * @see #getMinimumDate()
 * @see #setMinimumDate(Date)
 */
public void setMaximumDate(Date maximumDate) {
    ParamChecks.nullNotPermitted(maximumDate, "maximumDate");
    // check the new maximum date relative to the current minimum date
    Date minDate = getMinimumDate();
    long minMillis = minDate.getTime();
    long newMaxMillis = maximumDate.getTime();
    if (minMillis >= newMaxMillis) {
        Date oldMax = getMaximumDate();
        long length = oldMax.getTime() - minMillis;
        minDate = new Date(newMaxMillis - length);
    }
    setRange(new DateRange(minDate, maximumDate), true, false);
    fireChangeEvent();
}
Also used : DateRange(org.jfree.data.time.DateRange) Date(java.util.Date)

Example 27 with DateRange

use of org.jfree.data.time.DateRange in project seng438-a3-R41Ryan by seng438-winter-2022.

the class DateAxis method estimateMaximumTickLabelHeight.

/**
 * 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) {
    RectangleInsets tickLabelInsets = getTickLabelInsets();
    double result = tickLabelInsets.getTop() + tickLabelInsets.getBottom();
    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, upperStr;
        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;
}
Also used : DateRange(org.jfree.data.time.DateRange) FontMetrics(java.awt.FontMetrics) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) RectangleInsets(org.jfree.ui.RectangleInsets) FontRenderContext(java.awt.font.FontRenderContext) LineMetrics(java.awt.font.LineMetrics) Font(java.awt.Font) Date(java.util.Date)

Example 28 with DateRange

use of org.jfree.data.time.DateRange in project seng438-a3-R41Ryan by seng438-winter-2022.

the class DateAxis method java2DToValue.

/**
 * 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.
 */
@Override
public double java2DToValue(double java2DValue, Rectangle2D area, RectangleEdge edge) {
    DateRange range = (DateRange) getRange();
    double axisMin = this.timeline.toTimelineValue(range.getLowerMillis());
    double axisMax = this.timeline.toTimelineValue(range.getUpperMillis());
    double min = 0.0;
    double max = 0.0;
    if (RectangleEdge.isTopOrBottom(edge)) {
        min = area.getX();
        max = area.getMaxX();
    } else if (RectangleEdge.isLeftOrRight(edge)) {
        min = area.getMaxY();
        max = area.getY();
    }
    double result;
    if (isInverted()) {
        result = axisMax - ((java2DValue - min) / (max - min) * (axisMax - axisMin));
    } else {
        result = axisMin + ((java2DValue - min) / (max - min) * (axisMax - axisMin));
    }
    return this.timeline.toMillisecond((long) result);
}
Also used : DateRange(org.jfree.data.time.DateRange)

Example 29 with DateRange

use of org.jfree.data.time.DateRange in project seng438-a3-R41Ryan by seng438-winter-2022.

the class DateAxis method valueToJava2D.

/**
 * 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.
 */
@Override
public double valueToJava2D(double value, Rectangle2D area, RectangleEdge edge) {
    value = this.timeline.toTimelineValue((long) value);
    DateRange range = (DateRange) getRange();
    double axisMin = this.timeline.toTimelineValue(range.getLowerMillis());
    double axisMax = this.timeline.toTimelineValue(range.getUpperMillis());
    double result = 0.0;
    if (RectangleEdge.isTopOrBottom(edge)) {
        double minX = area.getX();
        double maxX = area.getMaxX();
        if (isInverted()) {
            result = maxX + ((value - axisMin) / (axisMax - axisMin)) * (minX - maxX);
        } else {
            result = minX + ((value - axisMin) / (axisMax - axisMin)) * (maxX - minX);
        }
    } else if (RectangleEdge.isLeftOrRight(edge)) {
        double minY = area.getMinY();
        double maxY = area.getMaxY();
        if (isInverted()) {
            result = minY + (((value - axisMin) / (axisMax - axisMin)) * (maxY - minY));
        } else {
            result = maxY - (((value - axisMin) / (axisMax - axisMin)) * (maxY - minY));
        }
    }
    return result;
}
Also used : DateRange(org.jfree.data.time.DateRange)

Example 30 with DateRange

use of org.jfree.data.time.DateRange in project seng438-a3-R41Ryan by seng438-winter-2022.

the class DateAxis method autoAdjustRange.

/**
 * Rescales the axis to ensure that all data is visible.
 */
@Override
protected void autoAdjustRange() {
    Plot plot = getPlot();
    if (plot == null) {
        // no plot, no data
        return;
    }
    if (plot instanceof ValueAxisPlot) {
        ValueAxisPlot vap = (ValueAxisPlot) plot;
        Range r = vap.getDataRange(this);
        if (r == null) {
            if (this.timeline instanceof SegmentedTimeline) {
                // Timeline hasn't method getStartTime()
                r = new DateRange(((SegmentedTimeline) this.timeline).getStartTime(), ((SegmentedTimeline) this.timeline).getStartTime() + 1);
            } else {
                r = new DateRange();
            }
        }
        long upper = this.timeline.toTimelineValue((long) r.getUpperBound());
        long lower;
        long fixedAutoRange = (long) getFixedAutoRange();
        if (fixedAutoRange > 0.0) {
            lower = upper - fixedAutoRange;
        } else {
            lower = this.timeline.toTimelineValue((long) r.getLowerBound());
            double range = upper - lower;
            long minRange = (long) getAutoRangeMinimumSize();
            if (range < minRange) {
                long expand = (long) (minRange - range) / 2;
                upper = upper + expand;
                lower = lower - expand;
            }
            upper = upper + (long) (range * getUpperMargin());
            lower = lower - (long) (range * getLowerMargin());
        }
        upper = this.timeline.toMillisecond(upper);
        lower = this.timeline.toMillisecond(lower);
        DateRange dr = new DateRange(new Date(lower), new Date(upper));
        setRange(dr, false, false);
    }
}
Also used : DateRange(org.jfree.data.time.DateRange) Plot(org.jfree.chart.plot.Plot) ValueAxisPlot(org.jfree.chart.plot.ValueAxisPlot) ValueAxisPlot(org.jfree.chart.plot.ValueAxisPlot) DateRange(org.jfree.data.time.DateRange) Range(org.jfree.data.Range) Date(java.util.Date)

Aggregations

DateRange (org.jfree.data.time.DateRange)39 Date (java.util.Date)24 Range (org.jfree.data.Range)13 Font (java.awt.Font)7 FontMetrics (java.awt.FontMetrics)6 FontRenderContext (java.awt.font.FontRenderContext)6 LineMetrics (java.awt.font.LineMetrics)6 DateFormat (java.text.DateFormat)6 SimpleDateFormat (java.text.SimpleDateFormat)6 RectangleInsets (org.jfree.ui.RectangleInsets)4 Plot (org.jfree.chart.plot.Plot)3 ValueAxisPlot (org.jfree.chart.plot.ValueAxisPlot)3 Calendar (java.util.Calendar)2 GregorianCalendar (java.util.GregorianCalendar)2 RectangleInsets (org.jfree.chart.api.RectangleInsets)2 Test (org.junit.Test)2 Test (org.junit.jupiter.api.Test)2 TransferStatus (com.tesshu.jpsonic.domain.TransferStatus)1 BoundedDateAxis (fr.jmmc.oiexplorer.core.gui.chart.BoundedDateAxis)1 BasicStroke (java.awt.BasicStroke)1