2012-07-11 3 views
0

JFreeChart API를 사용하여 동적 시계열 차트를 만들었습니다. 잘 작동하고 있습니다. 콤보 상자를 추가해야하는데 시간 값은 5 초, 15 초, 30 초와 같습니다. 사용자가 시간 축을 선택하면 주어진 시간 간격으로 다시 그려야하고 타이머는 프로세스를 5, 15, 30 초 동안 지연해야합니다 (차트 업데이트). 내 이전 게시물이시계열 JFreeChart가 시간 축 다시 그립니다.

그러나 그것은 나를 위해 일한 아니에요에 콤보 상자를 추가하는 등의 몇 가지 확장과 this

에 I이, 어떤 도움을 이해할 수있을 것이다. 감사

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(); 
     } 
    }); 
} 
+1

'TimeSeriesCollection'또는'DynamicTimeSeriesCollection'을 사용하고 있습니까? 귀하의 접근 방식을 보여주는 [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하십시오. – trashgod

+0

DynamicTimeSeriesCollection을 사용하고 있습니다. – mallikarjun

답변

1

내가 이해가 잘 모르겠어요를 만드는 당신의 게시 한 조각의 요구 사항. 몇 가지 다른 주파수에서 데이터 소스를 샘플링하기 만하면 example과 같이 javax.swing.Timer 지연을 설정할 수 있습니다.

부록 : 다시 칠하고 싶습니다. DateAxis.

API 노트에 setTimeBase() "시간 배열이 이미 채워진 경우 자동으로 반환됩니다." 콤보 액션 리스너에 DynamicTimeSeriesCollection을 다시 만들어야 할 것으로 판단됩니다. here과 같이 DateAxis의 눈금 단위와 형식을 변경할 수도 있습니다.

+0

콤보 상자 작업 이벤트에서 위 코드의 지연을 설정하고 있습니다. 하지만 나는 날짜 표시를 다시 채색하고 싶습니다. 예를 들어 15 초를 선택하면 시간 축은 라인에 7 분 간격을 표시해야합니다. 5 초를 선택하면 타임 라인에 2 분 간격을 표시해야합니다. 그래서 ** unit ** 콤보 상자 코드를 할당하고 chartpanel을 다시 그립니다. 그것은 나를 위해 작동하지 않았다. – mallikarjun

+0

나는 정교했다. 귀하의 현재 접근법을 보여주는 [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하는 것을 망설이지 마십시오. – trashgod

관련 문제