From: SourceForge.net <no...@so...> - 2007-02-06 16:38:12
|
Bugs item #1086307, was opened at 2004-12-16 08:20 Message generated for change (Comment added) made by mungady You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1086307&group_id=15494 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: General >Group: 1.0.x >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: Ulrich Voigt (boente) Assigned to: David Gilbert (mungady) Summary: Crosshairs working wrong with multiple axis Initial Comment: If the chart has multiple axes, crosshairs are displayed at the wrong position and sometimes datapoints cannot be selected. Use the following test-app (derived from CrosshairDemo2): package test; import java.awt.BorderLayout; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.DefaultXYItemRenderer; import org.jfree.data.time.Minute; import org.jfree.data.time.RegularTimePeriod; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; /** * An example of.... */ public class TwoAxisCrosshairTest extends ApplicationFrame { private static final int SERIES_COUNT = 2; private TimeSeriesCollection[] datasets; private TimeSeries[] series; private ChartPanel chartPanel; /** * A demonstration application showing how to... * * @param title the frame title. */ public TwoAxisCrosshairTest(String title) { super(title); this.datasets = new TimeSeriesCollection[SERIES_COUNT]; this.series = new TimeSeries[SERIES_COUNT]; JPanel content = new JPanel(new BorderLayout()); JFreeChart chart = createChart(); this.chartPanel = new ChartPanel(chart); this.chartPanel.setPreferredSize(new java.awt.Dimension(600, 270)); content.add(this.chartPanel); setContentPane(content); } /** * Creates the demo chart. * * @return The chart. */ private JFreeChart createChart() { JFreeChart chart = ChartFactory.createTimeSeriesChart( "Crosshair Demo 2", "Time of Day", "Value", null, true, true, false ); XYDataset[] datasets = new XYDataset[SERIES_COUNT]; for (int i = 0; i < SERIES_COUNT; i++) { datasets[i] = createDataset(i, "Series " + i, 100.0 - i * 10.0, new Minute(), 10); if (i == 0) { chart.getXYPlot().setDataset(datasets[i]); chart.getXYPlot().getRangeAxis(0).setLowerBound(0.0d); } else { XYPlot plot = chart.getXYPlot(); plot.setDataset(i, datasets[i]); plot.setRangeAxis(i, new NumberAxis("Axis " + (i + 1))); plot.mapDatasetToRangeAxis(i, i); plot.setRenderer(i, new DefaultXYItemRenderer()); } } XYPlot plot = chart.getXYPlot(); plot.setDomainCrosshairVisible(true); plot.setDomainCrosshairLockedOnData(true); plot.setRangeCrosshairVisible(true); plot.setRangeCrosshairLockedOnData(true); return chart; } /** * Creates a sample dataset. * * @param index the dataset index. * @param name the dataset name. * @param base the starting value. * @param start the starting period. * @param count the number of values to generate. * * @return The dataset. */ private XYDataset createDataset(int index, String name, double base, RegularTimePeriod start, int count) { this.series[index] = new TimeSeries(name, start.getClass()); RegularTimePeriod period = start; double value = base; for (int i = 0; i < count; i++) { this.series[index].add(period, value); period = period.next(); value = value * (1 + (Math.random() - 0.495) / 10.0); } this.datasets[index] = new TimeSeriesCollection(); this.datasets[index].addSeries(this.series[index]); return this.datasets[index]; } /** * Starting point for the demonstration application. * * @param args ignored. */ public static void main(String[] args) { TwoAxisCrosshairTest demo = new TwoAxisCrosshairTest("Crosshair Demo 2"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } ---------------------------------------------------------------------- >Comment By: David Gilbert (mungady) Date: 2007-02-06 16:38 Message: Logged In: YES user_id=112975 Originator: NO Thanks for the report and sorry for not dealing with this one sooner. I've committed a patch to CVS for inclusion in the upcoming 1.0.4 release. Closing as fixed. Regards, Dave Gilbert JFreeChart Project Leader ---------------------------------------------------------------------- Comment By: Ulrich Voigt (boente) Date: 2006-10-11 07:24 Message: Logged In: YES user_id=1098749 Up to 1.0.2 it does not work in the unpatched freechart (patch ed version not tested). David can you please check if the pathch works and commit it to 1.0.3? Thanx! ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2006-09-22 09:18 Message: Logged In: NO Sorry for my last comment look at the code that had the patch, so nothing changed it still doesn't work but works fine with the patch. I think it's about time that this patch be integrated in the main code tree. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2006-09-21 15:19 Message: Logged In: NO Not sure if this should be added here but the problem is now present again in 1.0.1-1.0.2 but not 1.0.0 because of the following version 1.0+ draws like this if (isRangeCrosshairVisible() && getRangeAxis().getRange().contains(getRangeCrosshairValue())) { it uses getRangeAxis() which always return the axis 0 so therefore this will not work in multiple axis situation. Not sure what a permanent fix would be but we can go back to getCrosshairRangeAxis() instead. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2006-08-09 16:36 Message: Logged In: NO to add to my latest comment. I now see that for some reason the crosshair are painted when showing up a chart panel initially even when no series are inside. For simple plots the line seem to coincide with the axis which is ok but for combined plot the y axis line of the crosshair is drawn right in the middle of the chart. I might investigate why it's doing this or go back to 1.0.0 with the patch. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2006-08-09 16:31 Message: Logged In: NO This seems to be related to this patch http://sourceforge.net/tracker/index.php?func=detail&aid=1314807&group_id=15494&atid=315494 and now seems to work with the latest code 1.0.1. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1086307&group_id=15494 |