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 に答える