我使用JFreeChart API创建了动态时间序列图表。它工作正常。我必须添加一个组合框,其中时间值将在那里,如5秒,15秒,30秒。当用户从中选择时,时间轴必须以给定的间隔重新绘制,并且计时器必须将进程延迟5,15,30秒(更新图表)。我在上一篇文章this
中这样做了有一些扩展名,例如添加组合框
但它不适合我,任何帮助将不胜感激。感谢
编辑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();
}
});
}
答案 0 :(得分:1)
我不确定我是否理解了您发布的片段的要求。如果您只需要以几种不同的频率对数据源进行采样,则可以设置javax.swing.Timer
延迟,如example所示。
附录:我要重新绘制DateAxis
。
API注意到setTimeBase()
“如果时间数组已经填充,将静默返回。”我怀疑您需要在组合的动作侦听器中重新创建DynamicTimeSeriesCollection
。您可能还想更改DateAxis
的刻度单位和格式,如上所述here。