ciao ho un problema stranissimo, quando provo ad eseguire questa classe:
codice:
package a_ApplicationLayer;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.XYDataset;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import b_BusinessLayer.BusinessUser;
/**
* A demonstration application showing a time series chart where you can dynamically add
* (random) data by clicking on a button.
*
*/
public class DynamicDataDemo extends ApplicationFrame implements ActionListener {
/** The time series data. */
public TimeSeries series;
private BusinessUser dati;
/** The most recent value added. */
private double lastValue = 100.0;
/**
* Constructs a new demonstration application.
*
* @param title the frame title.
*/
public DynamicDataDemo(final String title,BusinessUser dati) {
super(title);
this.series = new TimeSeries("Random Data", Millisecond.class);
this.dati=dati;
final TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
final JButton button = new JButton("Add New Data Item");
button.setActionCommand("ADD_DATA");
button.addActionListener(this);
final JPanel content = new JPanel(new BorderLayout());
content.add(chartPanel);
content.add(button, BorderLayout.SOUTH);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(content);
}
/**
* Creates a sample chart.
*
* @param dataset the dataset.
*
* @return A sample chart.
*/
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
"Dynamic Data Demo",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = result.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(20000.0); // 60 seconds
axis = plot.getRangeAxis();
axis.setRange(-100.0, 0.0);
return result;
}
public void add_valore(double val){
this.series.add(new Millisecond(),val);
}
public void registra(){
for(int i=0;i<20;i++)
{
this.series.add(new Millisecond(),this.dati.getSegnale());
System.out.println("ciao");
}
}
// ****************************************
************************************
// * JFREECHART DEVELOPER GUIDE *
// * The JFreeChart Developer Guide, written by David Gilbert, is available *
// * to purchase from Object Refinery Limited: *
// * *
// * http://www.object-refinery.com/jfreechart/guide.html *
// * *
// * Sales are used to provide funding for the JFreeChart project - please *
// * support us so that we can continue developing free software. *
// ****************************************
************************************
/**
* Handles a click on the button by adding new (random) data.
*
* @param e the action event.
*/
public void actionPerformed(final ActionEvent e) {
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(final String[] args) {
BusinessUser d= new BusinessUser();
final DynamicDataDemo demo = new DynamicDataDemo("Dynamic Data Demo",d);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
demo.series.add(new Millisecond(),d.getSegnale());
demo.series.add(new Millisecond(),d.getSegnale());
demo.series.add(new Millisecond(),d.getSegnale());
}
la cosa stranissima è che se prendo tutto il codice presente nel Main quindi questo
codice:
BusinessUser d= new BusinessUser();
final DynamicDataDemo demo = new DynamicDataDemo("Dynamic Data Demo",d);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
demo.series.add(new Millisecond(),d.getSegnale());
demo.series.add(new Millisecond(),d.getSegnale());
demo.series.add(new Millisecond(),d.getSegnale());
e lo collego ad un'evento di un bottone di un'altra finestra
il grafico mi si apre correttamente ma aspetta di creare tutti e tre i segnali e poi lo visualizza di colpo! (menter eseguendo lo stesso codice nel main della classe i punti venivano inseriti ogni 2 secondi [il tempo impiegato dalla funzione getsegnale()])
nell'alro caso invece resta una finestra grigia x 6 secondi e poi mi disegna di colpo il grafico!!!
ho provato anche a lanciare un thread apposta x il grafico ma non cambia niente...secondo voi cosa può essere?
grazie mille!!