Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java @ 1824:982956bde69e
Added a dataset to zero mapper to circumvent shortcommings in XYDifferenceRenderer.
flys-artifacts/trunk@3153 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 03 Nov 2011 12:28:38 +0000 |
parents | 7a11b37d8594 |
children | 0e9c0b49b4ef |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java Thu Nov 03 10:32:17 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java Thu Nov 03 12:28:38 2011 +0000 @@ -73,8 +73,7 @@ * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ - -package org.jfree.chart.renderer.xy; +package de.intevation.flys.jfree; import java.awt.Color; import java.awt.Graphics2D; @@ -89,6 +88,7 @@ import java.io.ObjectOutputStream; import java.util.Collections; import java.util.LinkedList; +import java.util.Iterator; import org.jfree.chart.LegendItem; import org.jfree.chart.axis.ValueAxis; @@ -108,6 +108,10 @@ import org.jfree.util.PublicCloneable; import org.jfree.util.ShapeUtilities; +import org.jfree.chart.renderer.xy.AbstractXYItemRenderer; +import org.jfree.chart.renderer.xy.XYItemRenderer; +import org.jfree.chart.renderer.xy.XYItemRendererState; + /** * A renderer for an {@link XYPlot} that highlights the differences between two * series. The example shown here is generated by the @@ -135,6 +139,8 @@ /** The shape to display in the legend item. */ private transient Shape legendLine; + private XYDatasetToZeroMapper mapper; + /** * This flag controls whether or not the x-coordinates (in Java2D space) * are rounded to integers. When set to true, this can avoid the vertical @@ -150,7 +156,7 @@ * Creates a new renderer with default attributes. */ public StableXYDifferenceRenderer() { - this(Color.green, Color.red, false); + this(Color.green, Color.red, false, null); } /** @@ -163,7 +169,8 @@ * @param shapes draw shapes? */ public StableXYDifferenceRenderer(Paint positivePaint, Paint negativePaint, - boolean shapes) { + boolean shapes, + XYDatasetToZeroMapper mapper) { if (positivePaint == null) { throw new IllegalArgumentException( "Null 'positivePaint' argument."); @@ -177,6 +184,7 @@ this.shapesVisible = shapes; this.legendLine = new Line2D.Double(-7.0, 0.0, 7.0, 0.0); this.roundXCoordinates = false; + this.mapper = mapper; } /** @@ -385,13 +393,35 @@ CrosshairState crosshairState, int pass) { - if (pass == 0) { - drawItemPass0(g2, dataArea, info, plot, domainAxis, rangeAxis, - dataset, series, item, crosshairState); + if (mapper == null) { + switch (pass) { + case 0: + drawItemPass0(g2, dataArea, info, + plot, domainAxis, rangeAxis, + dataset, series, item, crosshairState); + break; + case 1: + drawItemPass1(g2, dataArea, info, + plot, domainAxis, rangeAxis, + dataset, series, item, crosshairState); + } } - else if (pass == 1) { - drawItemPass1(g2, dataArea, info, plot, domainAxis, rangeAxis, - dataset, series, item, crosshairState); + else { + for (Iterator<XYDataset> iter = mapper.iterator(dataset); + iter.hasNext(); + ) { + switch (pass) { + case 0: + drawItemPass0(g2, dataArea, info, + plot, domainAxis, rangeAxis, + dataset, series, item, crosshairState); + break; + case 1: + drawItemPass1(g2, dataArea, info, + plot, domainAxis, rangeAxis, + dataset, series, item, crosshairState); + } + } // for all segments } } @@ -1239,4 +1269,3 @@ this.legendLine = SerialUtilities.readShape(stream); } } -