0

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

带有一些扩展,例如向其添加组合框

但这对我不起作用,任何帮助将不胜感激。谢谢

EDIT 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();
      }
  });
 }
4

1 回答 1

1

我不确定我是否从您发布的片段中了解您的要求。如果您只需要以几个不同的频率对数据源进行采样,您可以设置javax.swing.Timer延迟,如本示例所示。

附录:我想重新粉刷DateAxis

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

于 2012-07-11T16:22:25.560 回答