Java tutorial
package org.jfree.chart.demo; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.general.DatasetChangeEvent; import org.jfree.data.general.DatasetChangeListener; import org.jfree.data.general.DatasetUtilities; 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.AbstractXYDataset; import org.jfree.data.xy.XYDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RectangleInsets; import org.jfree.ui.RefineryUtilities; public class TranslateDemo1 extends ApplicationFrame { private static final long serialVersionUID = 1L; private static class DemoPanel extends JPanel implements ChangeListener { private static final long serialVersionUID = 1L; static class TranslatingXYDataset extends AbstractXYDataset implements XYDataset, DatasetChangeListener { private static final long serialVersionUID = 1L; @SuppressWarnings("unused") public double getTranslate() { return translate; } public void setTranslate(double d) { translate = d; fireDatasetChanged(); } public int getItemCount(int i) { return underlying.getItemCount(i); } public double getXValue(int i, int j) { return underlying.getXValue(i, j) + translate; } public Number getX(int i, int j) { return new Double(getXValue(i, j)); } public Number getY(int i, int j) { return new Double(getYValue(i, j)); } public double getYValue(int i, int j) { return underlying.getYValue(i, j); } public int getSeriesCount() { return underlying.getSeriesCount(); } @SuppressWarnings("rawtypes") public Comparable getSeriesKey(int i) { return underlying.getSeriesKey(i); } public void datasetChanged(DatasetChangeEvent datasetchangeevent) { fireDatasetChanged(); } private XYDataset underlying; private double translate; public TranslatingXYDataset(XYDataset xydataset) { underlying = xydataset; underlying.addChangeListener(this); translate = 0.0D; } } private JFreeChart createChart() { XYDataset xydataset = createDataset("Random 1", 100D, new Minute(), 200); JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Translate Demo 1", "Time of Day", "Value", xydataset, true, true, false); jfreechart.setBackgroundPaint(Color.white); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); xyplot.setOrientation(PlotOrientation.VERTICAL); xyplot.setBackgroundPaint(Color.lightGray); xyplot.setDomainGridlinePaint(Color.white); xyplot.setRangeGridlinePaint(Color.white); xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); xyplot.setDomainCrosshairVisible(true); xyplot.setDomainCrosshairLockedOnData(false); xyplot.setRangeCrosshairVisible(false); XYItemRenderer xyitemrenderer = xyplot.getRenderer(); xyitemrenderer.setSeriesPaint(0, Color.black); DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis(); org.jfree.data.Range range = DatasetUtilities.findDomainBounds(dataset); dateaxis.setRange(range); return jfreechart; } private XYDataset createDataset(String s, double d, RegularTimePeriod regulartimeperiod, int i) { series = new TimeSeries(s); RegularTimePeriod regulartimeperiod1 = regulartimeperiod; double d1 = d; for (int j = 0; j < i; j++) { series.add(regulartimeperiod1, d1); regulartimeperiod1 = regulartimeperiod1.next(); d1 *= 1.0D + (Math.random() - 0.495D) / 10D; } TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(series); dataset = new TranslatingXYDataset(timeseriescollection); return dataset; } public void stateChanged(ChangeEvent changeevent) { int i = slider.getValue(); dataset.setTranslate((double) (i * 60) * 1000D); } private TimeSeries series; private ChartPanel chartPanel; private JFreeChart chart; private JSlider slider; private TranslatingXYDataset dataset; public DemoPanel() { super(new BorderLayout()); chart = createChart(); chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(600, 270)); chartPanel.setDomainZoomable(true); chartPanel.setRangeZoomable(true); javax.swing.border.CompoundBorder compoundborder = BorderFactory.createCompoundBorder( BorderFactory.createEmptyBorder(4, 4, 4, 4), BorderFactory.createEtchedBorder()); chartPanel.setBorder(compoundborder); add(chartPanel); JPanel jpanel = new JPanel(new BorderLayout()); jpanel.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4)); slider = new JSlider(-200, 200, 0); slider.setPaintLabels(true); slider.setMajorTickSpacing(50); slider.setPaintTicks(true); slider.addChangeListener(this); jpanel.add(slider); add(jpanel, "South"); } } public TranslateDemo1(String s) { super(s); setContentPane(new DemoPanel()); } public static JPanel createDemoPanel() { return new DemoPanel(); } public static void main(String args[]) { TranslateDemo1 translatedemo1 = new TranslateDemo1("Translate Demo 1"); translatedemo1.pack(); RefineryUtilities.centerFrameOnScreen(translatedemo1); translatedemo1.setVisible(true); } }