如何从大规模Java生成动态图

时间:2016-02-15 09:36:12

标签: java swing charts jfreechart

我有一个实时构建动态图形的工作,例如,我发现下面的JFreeChart链接会带来,但我无法弄清楚如何使用这个例子,可以告诉我在哪里将数组放在数据中,然后例如推导3个seeundy的优势周期延迟,并使用数组中的数据构建图形。

http://www.java2s.com/Code/Java/Chart/JFreeChartDynamicDataDemo.htm

特别是,我必须在哪里编写循环以及从图中看到大量的值?

2 个答案:

答案 0 :(得分:4)

MVC pattern位于JFreeChart中动态图表的核心 - 如果您更新模型,则侦听视图将相应地更新自身。在引用的示例中,Swing Timer唤起了ActionListener的实施,定期add() TimeSeries的新值。你的代码也会这样做。采用类似的方法hereDynamicTimeSeriesCollection。要在后台处理数据,请使用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;
   }
}