2012-07-11 138 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