2012-07-11 101 views
0

我使用JFreeChart API创建了动态时间序列图表。它工作正常。我必须添加一个组合框,其中的时间值将在那里,如5秒,15秒,30秒。当用户从中选择时间轴时,必须重新给定时间间隔,并且计时器必须将过程延迟5,15,30秒(更新图表)。我这个在我以前的帖子this时间序列JFreeChart重绘时间轴

与如添加组合框它

但它不是为我工作的一些扩展,任何帮助,将不胜感激。感谢

编辑1删除不需要的代码和其余的代码是

final DynamicTimeSeriesCollection dataset = 
    new DynamicTimeSeriesCollection(1, 60, new Second()); 

dataset.setTimeBase(new Second(0,seriesvalue*2, 5, 11, 7, 2012)); 

dataset.addSeries(new float[]{0}, 0, "Currency Rate"); 
JFreeChart chart = createChart(dataset); 
chartPanel = new ChartPanel(chart); 


final JComboBox combo = new JComboBox(); 
combo.addItem("5"); 
combo.addItem("15"); 
combo.addItem("30"); 

combo.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 

    if("5".equals(combo.getSelectedItem())){ 
     seriesvalue=5; 
     timer.setDelay(seriesvalue*1000); 
    }else if("15".equals(combo.getSelectedItem())){ 

     seriesvalue=15; 
     timer.setDelay(seriesvalue*1024); 
     unit=new DateTickUnit(DateTickUnitType.MINUTE,seriesvalue); 
     chartPanel.repaint(); 
    } 
    } 
}); 
    add(chartPanel,BorderLayout.CENTER); 
    add(combo,BorderLayout.SOUTH); 
timer = new Timer(999*seriesvalue, new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      for(int i=0;i<seriesvalue;i++){ 

      newData[0] = randy.getRandomvalue(); 
      dataset.advanceTime(); 
      dataset.appendData(newData); 

      }    

     } 
    }); 

创建数据集的代码

private JFreeChart createChart(final XYDataset dataset) { 
    JFreeChart result= ChartFactory.createTimeSeriesChart(
     "Dyanmic chart", "hh:mm:ss", "Currency", dataset, true, true, false); 
    final XYPlot plot = result.getXYPlot(); 

    dateAxis= (DateAxis)plot.getDomainAxis(); 
    unit = new DateTickUnit(DateTickUnitType.MINUTE,seriesvalue/2); 
    return result; 
} 

主要方法

public static void main(final String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      DynaChart chart = new DynaChart(); 
      chart.pack(); 
      RefineryUtilities.centerFrameOnScreen(chart); 
      chart.setVisible(true); 
      chart.start(); 
     } 
    }); 
} 
+1

您是使用'TimeSeriesCollection'还是'DynamicTimeSeriesCollection'?请修改您的问题以包含显示您的方法的[sscce](http://sscce.org/)。 – trashgod 2012-07-11 09:37:29

+0

我正在使用DynamicTimeSeriesCollection – mallikarjun 2012-07-11 10:04:00

回答

1

我不知道我理解你的来自您发布的片段的要求。如果您只需要以几个不同的频率采样数据源,则可以设置javax.swing.Timer延迟,如此example中所示。

附录:我想重画DateAxis

API注意到setTimeBase()“如果时间数组已经填充,将会静静地返回。”我怀疑你需要在你的组合动作侦听器中重新创建DynamicTimeSeriesCollection。您可能还想要更改DateAxis的刻度单位和格式,如here所述。

+0

我设置组合框操作事件中的上述代码延迟。但我想重新绘制日期轴。例如,如果我选择15秒时间轴必须在线上显示7分钟的时间间隔。如果我选择5秒,它必须在时间线上显示2分钟的时间间隔。所以我分配**单位**组合框代码并重新绘制chartpanel。它不适合我。 – mallikarjun 2012-07-12 01:38:07

+0

我已经阐述过;不要犹豫,编辑你的问题,包括一个[sscce](http://sscce.org/),显示你目前的做法。 – trashgod 2012-07-12 16:25:44