Search in sources :

Example 21 with XYToolTipGenerator

use of org.jfree.chart.labels.XYToolTipGenerator in project SIMVA-SoS by SESoS.

the class XYStepAreaChartTest method testSetSeriesToolTipGenerator.

/**
 * Check that setting a tool tip generator for a series does override the
 * default generator.
 */
@Test
public void testSetSeriesToolTipGenerator() {
    XYPlot plot = (XYPlot) this.chart.getPlot();
    XYItemRenderer renderer = plot.getRenderer();
    StandardXYToolTipGenerator tt = new StandardXYToolTipGenerator();
    renderer.setSeriesToolTipGenerator(0, tt);
    XYToolTipGenerator tt2 = renderer.getToolTipGenerator(0, 0);
    assertTrue(tt2 == tt);
}
Also used : StandardXYToolTipGenerator(org.jfree.chart.labels.StandardXYToolTipGenerator) XYPlot(org.jfree.chart.plot.XYPlot) XYItemRenderer(org.jfree.chart.renderer.xy.XYItemRenderer) StandardXYToolTipGenerator(org.jfree.chart.labels.StandardXYToolTipGenerator) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator) Test(org.junit.Test)

Example 22 with XYToolTipGenerator

use of org.jfree.chart.labels.XYToolTipGenerator in project SIMVA-SoS by SESoS.

the class DefaultPolarItemRenderer method addEntity.

/**
 * Adds an entity to the collection.
 *
 * @param entities  the entity collection being populated.
 * @param area  the entity area (if <code>null</code> a default will be
 *              used).
 * @param dataset  the dataset.
 * @param series  the series.
 * @param item  the item.
 * @param entityX  the entity's center x-coordinate in user space (only
 *                 used if <code>area</code> is <code>null</code>).
 * @param entityY  the entity's center y-coordinate in user space (only
 *                 used if <code>area</code> is <code>null</code>).
 */
protected void addEntity(EntityCollection entities, Shape area, XYDataset dataset, int series, int item, double entityX, double entityY) {
    if (!getItemCreateEntity(series, item)) {
        return;
    }
    Shape hotspot = area;
    if (hotspot == null) {
        double r = getDefaultEntityRadius();
        double w = r * 2;
        if (getPlot().getOrientation() == PlotOrientation.VERTICAL) {
            hotspot = new Ellipse2D.Double(entityX - r, entityY - r, w, w);
        } else {
            hotspot = new Ellipse2D.Double(entityY - r, entityX - r, w, w);
        }
    }
    String tip = null;
    XYToolTipGenerator generator = getToolTipGenerator(series, item);
    if (generator != null) {
        tip = generator.generateToolTip(dataset, series, item);
    }
    String url = null;
    if (getURLGenerator() != null) {
        url = getURLGenerator().generateURL(dataset, series, item);
    }
    XYItemEntity entity = new XYItemEntity(hotspot, dataset, series, item, tip, url);
    entities.add(entity);
}
Also used : XYItemEntity(org.jfree.chart.entity.XYItemEntity) Shape(java.awt.Shape) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator) Ellipse2D(java.awt.geom.Ellipse2D)

Example 23 with XYToolTipGenerator

use of org.jfree.chart.labels.XYToolTipGenerator in project SIMVA-SoS by SESoS.

the class AbstractXYItemRenderer method addEntity.

/**
 * Adds an entity to the collection.
 *
 * @param entities  the entity collection being populated.
 * @param area  the entity area (if <code>null</code> a default will be
 *              used).
 * @param dataset  the dataset.
 * @param series  the series.
 * @param item  the item.
 * @param entityX  the entity's center x-coordinate in user space (only
 *                 used if <code>area</code> is <code>null</code>).
 * @param entityY  the entity's center y-coordinate in user space (only
 *                 used if <code>area</code> is <code>null</code>).
 */
protected void addEntity(EntityCollection entities, Shape area, XYDataset dataset, int series, int item, double entityX, double entityY) {
    if (!getItemCreateEntity(series, item)) {
        return;
    }
    Shape hotspot = area;
    if (hotspot == null) {
        double r = getDefaultEntityRadius();
        double w = r * 2;
        if (getPlot().getOrientation() == PlotOrientation.VERTICAL) {
            hotspot = new Ellipse2D.Double(entityX - r, entityY - r, w, w);
        } else {
            hotspot = new Ellipse2D.Double(entityY - r, entityX - r, w, w);
        }
    }
    String tip = null;
    XYToolTipGenerator generator = getToolTipGenerator(series, item);
    if (generator != null) {
        tip = generator.generateToolTip(dataset, series, item);
    }
    String url = null;
    if (getURLGenerator() != null) {
        url = getURLGenerator().generateURL(dataset, series, item);
    }
    XYItemEntity entity = new XYItemEntity(hotspot, dataset, series, item, tip, url);
    entities.add(entity);
}
Also used : XYItemEntity(org.jfree.chart.entity.XYItemEntity) Shape(java.awt.Shape) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator) Ellipse2D(java.awt.geom.Ellipse2D)

Example 24 with XYToolTipGenerator

use of org.jfree.chart.labels.XYToolTipGenerator in project SIMVA-SoS by SESoS.

the class StackedXYAreaRenderer method drawItem.

/**
 * Draws the visual representation of a single data item.
 *
 * @param g2  the graphics device.
 * @param state  the renderer state.
 * @param dataArea  the area within which the data is being drawn.
 * @param info  collects information about the drawing.
 * @param plot  the plot (can be used to obtain standard color information
 *              etc).
 * @param domainAxis  the domain axis.
 * @param rangeAxis  the range axis.
 * @param dataset  the dataset.
 * @param series  the series index (zero-based).
 * @param item  the item index (zero-based).
 * @param crosshairState  information about crosshairs on a plot.
 * @param pass  the pass index.
 *
 * @throws ClassCastException if <code>state</code> is not an instance of
 *         <code>StackedXYAreaRendererState</code> or <code>dataset</code>
 *         is not an instance of {@link TableXYDataset}.
 */
@Override
public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) {
    PlotOrientation orientation = plot.getOrientation();
    StackedXYAreaRendererState areaState = (StackedXYAreaRendererState) state;
    // Get the item count for the series, so that we can know which is the
    // end of the series.
    TableXYDataset tdataset = (TableXYDataset) dataset;
    int itemCount = tdataset.getItemCount();
    // get the data point...
    double x1 = dataset.getXValue(series, item);
    double y1 = dataset.getYValue(series, item);
    boolean nullPoint = false;
    if (Double.isNaN(y1)) {
        y1 = 0.0;
        nullPoint = true;
    }
    // Get height adjustment based on stack and translate to Java2D values
    double ph1 = getPreviousHeight(tdataset, series, item);
    double transX1 = domainAxis.valueToJava2D(x1, dataArea, plot.getDomainAxisEdge());
    double transY1 = rangeAxis.valueToJava2D(y1 + ph1, dataArea, plot.getRangeAxisEdge());
    // Get series Paint and Stroke
    Paint seriesPaint = getItemPaint(series, item);
    Paint seriesFillPaint = seriesPaint;
    if (getUseFillPaint()) {
        seriesFillPaint = getItemFillPaint(series, item);
    }
    Stroke seriesStroke = getItemStroke(series, item);
    if (pass == 0) {
        if (item == 0) {
            // Create a new Area for the series
            areaState.setSeriesArea(new Polygon());
            areaState.setLastSeriesPoints(areaState.getCurrentSeriesPoints());
            areaState.setCurrentSeriesPoints(new Stack());
            // start from previous height (ph1)
            double transY2 = rangeAxis.valueToJava2D(ph1, dataArea, plot.getRangeAxisEdge());
            // The first point is (x, 0)
            if (orientation == PlotOrientation.VERTICAL) {
                areaState.getSeriesArea().addPoint((int) transX1, (int) transY2);
            } else if (orientation == PlotOrientation.HORIZONTAL) {
                areaState.getSeriesArea().addPoint((int) transY2, (int) transX1);
            }
        }
        // Add each point to Area (x, y)
        if (orientation == PlotOrientation.VERTICAL) {
            Point point = new Point((int) transX1, (int) transY1);
            areaState.getSeriesArea().addPoint((int) point.getX(), (int) point.getY());
            areaState.getCurrentSeriesPoints().push(point);
        } else if (orientation == PlotOrientation.HORIZONTAL) {
            areaState.getSeriesArea().addPoint((int) transY1, (int) transX1);
        }
        if (getPlotLines()) {
            if (item > 0) {
                // get the previous data point...
                double x0 = dataset.getXValue(series, item - 1);
                double y0 = dataset.getYValue(series, item - 1);
                double ph0 = getPreviousHeight(tdataset, series, item - 1);
                double transX0 = domainAxis.valueToJava2D(x0, dataArea, plot.getDomainAxisEdge());
                double transY0 = rangeAxis.valueToJava2D(y0 + ph0, dataArea, plot.getRangeAxisEdge());
                if (orientation == PlotOrientation.VERTICAL) {
                    areaState.getLine().setLine(transX0, transY0, transX1, transY1);
                } else if (orientation == PlotOrientation.HORIZONTAL) {
                    areaState.getLine().setLine(transY0, transX0, transY1, transX1);
                }
                g2.setPaint(seriesPaint);
                g2.setStroke(seriesStroke);
                g2.draw(areaState.getLine());
            }
        }
        // items > 0.  We can't draw an area for a single point.
        if (getPlotArea() && item > 0 && item == (itemCount - 1)) {
            double transY2 = rangeAxis.valueToJava2D(ph1, dataArea, plot.getRangeAxisEdge());
            if (orientation == PlotOrientation.VERTICAL) {
                // Add the last point (x,0)
                areaState.getSeriesArea().addPoint((int) transX1, (int) transY2);
            } else if (orientation == PlotOrientation.HORIZONTAL) {
                // Add the last point (x,0)
                areaState.getSeriesArea().addPoint((int) transY2, (int) transX1);
            }
            // polygon
            if (series != 0) {
                Stack points = areaState.getLastSeriesPoints();
                while (!points.empty()) {
                    Point point = (Point) points.pop();
                    areaState.getSeriesArea().addPoint((int) point.getX(), (int) point.getY());
                }
            }
            // Fill the polygon
            g2.setPaint(seriesFillPaint);
            g2.setStroke(seriesStroke);
            g2.fill(areaState.getSeriesArea());
            // Draw an outline around the Area.
            if (isOutline()) {
                g2.setStroke(lookupSeriesOutlineStroke(series));
                g2.setPaint(lookupSeriesOutlinePaint(series));
                g2.draw(areaState.getSeriesArea());
            }
        }
        int domainAxisIndex = plot.getDomainAxisIndex(domainAxis);
        int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis);
        updateCrosshairValues(crosshairState, x1, ph1 + y1, domainAxisIndex, rangeAxisIndex, transX1, transY1, orientation);
    } else if (pass == 1) {
        // On second pass render shapes and collect entity and tooltip
        // information
        Shape shape = null;
        if (getPlotShapes()) {
            shape = getItemShape(series, item);
            if (plot.getOrientation() == PlotOrientation.VERTICAL) {
                shape = ShapeUtilities.createTranslatedShape(shape, transX1, transY1);
            } else if (plot.getOrientation() == PlotOrientation.HORIZONTAL) {
                shape = ShapeUtilities.createTranslatedShape(shape, transY1, transX1);
            }
            if (!nullPoint) {
                if (getShapePaint() != null) {
                    g2.setPaint(getShapePaint());
                } else {
                    g2.setPaint(seriesPaint);
                }
                if (getShapeStroke() != null) {
                    g2.setStroke(getShapeStroke());
                } else {
                    g2.setStroke(seriesStroke);
                }
                g2.draw(shape);
            }
        } else {
            if (plot.getOrientation() == PlotOrientation.VERTICAL) {
                shape = new Rectangle2D.Double(transX1 - 3, transY1 - 3, 6.0, 6.0);
            } else if (plot.getOrientation() == PlotOrientation.HORIZONTAL) {
                shape = new Rectangle2D.Double(transY1 - 3, transX1 - 3, 6.0, 6.0);
            }
        }
        // collect entity and tool tip information...
        if (state.getInfo() != null) {
            EntityCollection entities = state.getEntityCollection();
            if (entities != null && shape != null && !nullPoint) {
                String tip = null;
                XYToolTipGenerator generator = getToolTipGenerator(series, item);
                if (generator != null) {
                    tip = generator.generateToolTip(dataset, series, item);
                }
                String url = null;
                if (getURLGenerator() != null) {
                    url = getURLGenerator().generateURL(dataset, series, item);
                }
                XYItemEntity entity = new XYItemEntity(shape, dataset, series, item, tip, url);
                entities.add(entity);
            }
        }
    }
}
Also used : PlotOrientation(org.jfree.chart.plot.PlotOrientation) Stroke(java.awt.Stroke) Shape(java.awt.Shape) TableXYDataset(org.jfree.data.xy.TableXYDataset) Rectangle2D(java.awt.geom.Rectangle2D) Paint(java.awt.Paint) Point(java.awt.Point) Point(java.awt.Point) Paint(java.awt.Paint) Stack(java.util.Stack) XYItemEntity(org.jfree.chart.entity.XYItemEntity) EntityCollection(org.jfree.chart.entity.EntityCollection) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator) Polygon(java.awt.Polygon)

Example 25 with XYToolTipGenerator

use of org.jfree.chart.labels.XYToolTipGenerator in project lotro-tools by dmorcellet.

the class ScalableStatChartController method buildChart.

private JFreeChart buildChart() {
    String xAxisLabel = "Item level";
    String yAxisLabel = getTitle();
    String title = yAxisLabel;
    XYDataset xydataset = createDataset();
    JFreeChart jfreechart = ChartFactory.createXYLineChart(title, xAxisLabel, yAxisLabel, xydataset, PlotOrientation.VERTICAL, true, true, false);
    Color foregroundColor = GuiFactory.getForegroundColor();
    Paint backgroundPaint = GuiFactory.getBackgroundPaint();
    jfreechart.setBackgroundPaint(backgroundPaint);
    TextTitle t = new TextTitle(title);
    t.setFont(t.getFont().deriveFont(24.0f));
    t.setPaint(foregroundColor);
    jfreechart.setTitle(t);
    XYPlot plot = jfreechart.getXYPlot();
    plot.setDomainPannable(false);
    XYToolTipGenerator tooltip = new StandardXYToolTipGenerator() {

        @Override
        public String generateLabelString(XYDataset dataset, int series, int item) {
            String name = (String) ((XYSeriesCollection) dataset).getSeriesKey(series);
            double value = dataset.getYValue(series, item);
            int level = (int) dataset.getXValue(series, item);
            return name + ": " + level + " -> " + value;
        }
    };
    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    renderer.setSeriesLinesVisible(0, true);
    renderer.setSeriesShapesVisible(0, true);
    renderer.setBaseToolTipGenerator(tooltip);
    plot.setRenderer(renderer);
    // X axis
    NumberAxis axis = (NumberAxis) plot.getDomainAxis();
    axis.setAxisLinePaint(foregroundColor);
    axis.setLabelPaint(foregroundColor);
    axis.setTickLabelPaint(foregroundColor);
    // Y axis
    NumberAxis valueAxis = (NumberAxis) plot.getRangeAxis();
    valueAxis.setAutoRange(true);
    valueAxis.setAutoRangeIncludesZero(false);
    valueAxis.setAxisLinePaint(foregroundColor);
    valueAxis.setLabelPaint(foregroundColor);
    valueAxis.setTickLabelPaint(foregroundColor);
    LegendTitle legend = jfreechart.getLegend();
    legend.setPosition(RectangleEdge.BOTTOM);
    legend.setItemPaint(foregroundColor);
    legend.setBackgroundPaint(backgroundPaint);
    return jfreechart;
}
Also used : NumberAxis(org.jfree.chart.axis.NumberAxis) Color(java.awt.Color) XYLineAndShapeRenderer(org.jfree.chart.renderer.xy.XYLineAndShapeRenderer) LegendTitle(org.jfree.chart.title.LegendTitle) Paint(java.awt.Paint) JFreeChart(org.jfree.chart.JFreeChart) Paint(java.awt.Paint) TextTitle(org.jfree.chart.title.TextTitle) StandardXYToolTipGenerator(org.jfree.chart.labels.StandardXYToolTipGenerator) XYPlot(org.jfree.chart.plot.XYPlot) XYDataset(org.jfree.data.xy.XYDataset) StandardXYToolTipGenerator(org.jfree.chart.labels.StandardXYToolTipGenerator) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator)

Aggregations

XYToolTipGenerator (org.jfree.chart.labels.XYToolTipGenerator)28 StandardXYToolTipGenerator (org.jfree.chart.labels.StandardXYToolTipGenerator)22 XYPlot (org.jfree.chart.plot.XYPlot)21 NumberAxis (org.jfree.chart.axis.NumberAxis)14 XYItemRenderer (org.jfree.chart.renderer.xy.XYItemRenderer)13 StandardXYURLGenerator (org.jfree.chart.urls.StandardXYURLGenerator)10 JFreeChart (org.jfree.chart.JFreeChart)8 DateAxis (org.jfree.chart.axis.DateAxis)8 Paint (java.awt.Paint)7 XYURLGenerator (org.jfree.chart.urls.XYURLGenerator)7 XYItemEntity (org.jfree.chart.entity.XYItemEntity)6 Test (org.junit.Test)6 SimpleDateFormat (java.text.SimpleDateFormat)5 ValueAxis (org.jfree.chart.axis.ValueAxis)5 XYStepAreaRenderer (org.jfree.chart.renderer.xy.XYStepAreaRenderer)5 XYDataset (org.jfree.data.xy.XYDataset)5 Color (java.awt.Color)4 Shape (java.awt.Shape)4 EntityCollection (org.jfree.chart.entity.EntityCollection)4 PlotOrientation (org.jfree.chart.plot.PlotOrientation)4