我有一个实时构建动态图形的工作,例如,我发现下面的JFreeChart链接会带来,但我无法弄清楚如何使用这个例子,可以告诉我在哪里将数组放在数据中,然后例如推导3个seeundy的优势周期延迟,并使用数组中的数据构建图形。
http://www.java2s.com/Code/Java/Chart/JFreeChartDynamicDataDemo.htm
特别是,我必须在哪里编写循环以及从图中看到大量的值?
答案 0 :(得分:4)
MVC pattern位于JFreeChart中动态图表的核心 - 如果您更新模型,则侦听视图将相应地更新自身。在引用的示例中,Swing Timer
唤起了ActionListener
的实施,定期add()
TimeSeries
的新值。你的代码也会这样做。采用类似的方法here和DynamicTimeSeriesCollection
。要在后台处理数据,请使用SwingWoker
,图示为here。
答案 1 :(得分:1)
JFreeChart实现了org.jfree.ui.Drawable,因此您可以创建自定义JPanel,覆盖public void paint(Graphics g),在此方法中您可以创建JFreeChart,然后可以使用arg Graphic调用JfreeChart对象的方法绘制。
当数据更改时重绘此JPanel
下面的是你想要的例子:
/** Your custom JPanel */
public class MyPanel extends JPanel{
Random random =new Random(System.currentTimeMillis()); //this is only to simulate change data
public MyPanel(){
//simulation change data
new Thread(){
public void run(){
while(true){
try {
Thread.sleep(3000l);//in every 3 sec refresh
Thread.yield(); // release processor
repaint(); //repaint panel with new data
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}.start();
}
public void paint(Graphics g){
//paint panel
super.paint(g);
// create chart
JFreeChart lineChart = ChartFactory.createLineChart(
"My Title",
"Years","Number of Schools",
createDataset(),
PlotOrientation.VERTICAL,
true,true,false);
//draw chart on panel
lineChart.draw((Graphics2D) g, this.getVisibleRect());
}
/** create data for chart */
private DefaultCategoryDataset createDataset( )
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
dataset.addValue( random.nextInt(100) , "schools" , "1970" );
dataset.addValue( random.nextInt(100) , "schools" , "1980" );
dataset.addValue( random.nextInt(100) , "schools" , "1990" );
dataset.addValue( random.nextInt(100) , "schools" , "2000" );
dataset.addValue( random.nextInt(100) , "schools" , "2010" );
dataset.addValue( random.nextInt(100) , "schools" , "2014" );
return dataset;
}
}