Ciao Ragazzi!
Sono nuovo e novellino...
ho realizzato un grafico real time con Jfreechart, guardando un esempio della Developer Guide.
Tale grafico rappresenta solo un intervallo di un'eventuale misurazione di eventi.(I dati presi sono casuali)
Qualora volessi fermarlo, senza rimpiazzare istanti di campionamento, inserendo uno scroll che mi permette di vedere il tutto, come dovrei fare?
Spero che qualcuno mi aiuti.
Posto il codice, in maniera che possiate vedere e darmi suggerimenti su quanto ho realizzato:

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Frame;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer ;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;



public class RealTimeChart extends JPanel{
/**Dati temporali da rappresentare*/
private TimeSeries variabile;

/**Metodo costruttore
*
* @param maxAge durata max visualizzazione dato
*/
public RealTimeChart(int maxAge, String nomeVar, String grandezza){
super(new BorderLayout());
//Creazione serie dati che verranno rimpiazzati dopo maxAge
this.variabile=new TimeSeries(nomeVar,Millisecond.class);
this.variabile.setMaximumItemAge(maxAge);
//Creazione dataset da analizzare
TimeSeriesCollection dataset=new TimeSeriesCollection();
dataset.addSeries(this.variabile);

//Costruzione grafico da realizzare(dominio e variabile misurata)
DateAxis dominio=new DateAxis("Tempo");
NumberAxis valori=new NumberAxis(grandezza);
dominio.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));//scelta font scrittura
valori.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);//linee visibili, punti no
renderer.setSeriesPaint(0, Color.blue);//colore della funzione
renderer.setStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT,//Larghezza e finitura tratto
BasicStroke.JOIN_BEVEL));
XYPlot plot = new XYPlot(dataset, dominio, valori, renderer);//Disegno del grafico
//colori del grafico
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
dominio.setAutoRange(true);
dominio.setLowerMargin(0.0);
dominio.setUpperMargin(0.0);
dominio.setTickLabelsVisible(true);
valori.setStandardTickUnits(NumberAxis.createInteg erTickUnits());
//grafico
JFreeChart chart = new JFreeChart(grandezza,
new Font("SansSerif", Font.BOLD, 24), plot, true);
chart.setBackgroundPaint(Color.white);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBorder(BorderFactory.createCompoundB order(
BorderFactory.createEmptyBorder(4, 4, 4, 4),
BorderFactory.createLineBorder(Color.black)));
add(chartPanel);
}


/**Metodo che aggiunge un campione all'osservazione in atto
*
* @param val valore della variabile esaminata
*/
private void aggiungiValore(float val){
this.variabile.add(new Millisecond(), val);
}

/**Generatore di dati(crea eventi in determinati intervalli di tempo)
*
*/
class GeneratoreDati extends Timer implements ActionListener{
/**Costruttore
*
* @param intervallo cadenza arrivo dati, in millisecondi
*/
GeneratoreDati(int intervallo){
super(intervallo,null);
addActionListener(this);
}

/**Aggiunta di un nuovo campione alla misurazione
* @param event evento che viene invocato
*/
public void actionPerformed(ActionEvent event){
float val=(float)(Math.random()*10000);
aggiungiValore(val);
}

}

public static void main(String[] args){
JFrame frame=new JFrame("Rappresentazione");
RealTimeChart panel = new RealTimeChart(60000, "Grandezza", "Misura");
frame.getContentPane().add(panel, BorderLayout.CENTER);//posizionamento grafico
frame.setBounds(200, 120, 600, 280);
frame.setVisible(true);
panel.new GeneratoreDati(1000).start();//genera dati ogni secondo
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
}
}