Анимированый график - Java
Формулировка задачи:
Здравствуйте, допустим у меня есть график. Что использовать чтобы каждая точка рисовалась раз в полсекунды - тоесть что-то вроде анимации. В качестве библиотеки использую JFreeChart. В данном коде то, что я набросал - но, при создании следующей точки идет конфликт, так - как в JFreeChart не разрешается 2 однаковых серии. Делал изменение названия серии,но тогда выходит не то что нужно. Может посоветуете другую библиотеку?
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { XYSeriesCollection dataset = new XYSeriesCollection(); t = new Timer(100, new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { count ++; x++; y++; Text.setText(Integer.toString(count)); series.add(x, Math.sin(y)); dataset.addSeries(series); } }); t.start(); JFreeChart chart1 = ChartFactory.createXYLineChart( "1", "х", "у", dataset, PlotOrientation.VERTICAL, false, false, false); ChartPanel CP = new ChartPanel(chart1); XYPlot plot = chart1.getXYPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesLinesVisible(1, true);//тільки точки renderer.setSeriesShapesVisible(1, true); plot.setRenderer(renderer); jPanel1.setLayout(new java.awt.BorderLayout()); jPanel1.add(CP,BorderLayout.CENTER); jPanel1.validate(); }
Решение задачи: «Анимированый график»
textual
Листинг программы
private double f(double x, double v){ return (v / x - v * v); } XYChart.Series series = new XYChart.Series(); XYChart.Series series1 = new XYChart.Series(); XYChart.Series series2 = new XYChart.Series(); XYChart.Series series3 = new XYChart.Series(); private void longProcess(){ this.text.setText(Integer.toString(digitCount++)); while(x <= counter % 10){ vnew = v + f(x,v) * dx; ynew = y + vnew * dx; y = ynew; v = vnew; if (h % 70 == 0) { this.series.getData().addAll(new XYChart.Data(Double.toString(x), y)); this.series2.getData().addAll(new XYChart.Data(Double.toString(x), v)); this.series3.getData().addAll(new XYChart.Data(Double.toString(v), y)); } this.series1.getData().addAll(new XYChart.Data(Double.toString(x), Math.log(x*x/4) * Math.log(Math.exp(1))+2)); x += dx; h++; } counter = counter + 0.1; } protected AnimationTimer at = new AnimationTimer(){ long lastUpdate = 0; @Override public void handle(long now) { if (now - lastUpdate >= 20000000) { longProcess(); lastUpdate = now; } } }; public void start(){ at.start(); this.graf.getData().addAll(series); this.graf.getData().addAll(series1); graf.setCreateSymbols(false); graf.getCreateSymbols(); this.graf1.getData().addAll(series2); this.graf2.getData().addAll(series3); } public void stop(){ at.stop(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д