에 표시된 실시간으로 TimeSeries 차트의 실시간 데이터를 표시하려고합니다 (또는 적어도 시간은 실시간과 동일).JFreeChart - TimeSeries 차트의 X 축에서 실시간을 표시하는 방법
다음은 실제 입력과 같은 난수 문제에 대한 SSCCE입니다. 그것은 initial thread에 sleep()
을 허용하면서 스윙 GUI 객체한다
public class DynamicTimeSeriesChart extends JPanel {
private DynamicTimeSeriesCollection dataset;
private JFreeChart chart = null;
public DynamicTimeSeriesChart(final String title) {
dataset = new DynamicTimeSeriesCollection(1, 2000, new Second());
dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 1990)); // date 1st jan 0 mins 0 secs
dataset.addSeries(new float[1], 0, title);
chart = ChartFactory.createTimeSeriesChart(
title, "Time", title, dataset, true,
true, false);
final XYPlot plot = chart.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(200000); // proportional to scroll speed
axis = plot.getRangeAxis();
final ChartPanel chartPanel = new ChartPanel(chart);
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(chartPanel);
}
public void update(float value) {
float[] newData = new float[1];
newData[0] = value;
dataset.advanceTime();
dataset.appendData(newData);
}
public static void main(String[] args) {
JFrame frame = new JFrame("testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final DynamicTimeSeriesChart chart = new DynamicTimeSeriesChart("random numbers");
frame.add(chart);
frame.pack();
frame.setVisible(true);
Timer timer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
chart.update((float) (Math.random() * 10));
}
});
}
});
timer.start();
}
}
![image](https://i.stack.imgur.com/PWxhE.png)
. 그래도 문제는 여전히 남아 있습니다. 호스트의 시계를 폴링하는 방법이나 호스트가 NTP 서버와 동기화되는지 확인하지 않습니다. 나는 차트의 시간을 정하는 방법을 모른다. –추가 정보에 대한 설명 : 예제 차트는 실시간 속도로 시간이 표시되는 것처럼 보이지만 타이머 속도를 1Hz 이외의 값으로 변경하면 차트에 다른 속도로 시간이 표시됩니다. 차트에서 데이터 업데이트 속도에 관계없이 실제 속도로 시간을 표시 할 수있게하려고합니다. 지금까지 귀하의 노력에 감사드립니다. –
실시간은 1Hz입니다. 다른 속도로 도착하는 이벤트를 병합 할 수 있습니다. – trashgod