Анимированый график - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, допустим у меня есть график. Что использовать чтобы каждая точка рисовалась раз в полсекунды - тоесть что-то вроде анимации. В качестве библиотеки использую JFreeChart. В данном коде то, что я набросал - но, при создании следующей точки идет конфликт, так - как в JFreeChart не разрешается 2 однаковых серии. Делал изменение названия серии,но тогда выходит не то что нужно. Может посоветуете другую библиотеку?
Листинг программы
  1. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  2. XYSeriesCollection dataset = new XYSeriesCollection();
  3. t = new Timer(100, new ActionListener() {
  4. @Override
  5. public void actionPerformed(ActionEvent ae) {
  6. count ++;
  7. x++;
  8. y++;
  9. Text.setText(Integer.toString(count));
  10. series.add(x, Math.sin(y));
  11. dataset.addSeries(series);
  12. }
  13. });
  14. t.start();
  15. JFreeChart chart1 = ChartFactory.createXYLineChart(
  16. "1",
  17. "х",
  18. "у",
  19. dataset,
  20. PlotOrientation.VERTICAL,
  21. false, false, false);
  22. ChartPanel CP = new ChartPanel(chart1);
  23. XYPlot plot = chart1.getXYPlot();
  24. XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
  25. renderer.setSeriesLinesVisible(1, true);//тільки точки
  26. renderer.setSeriesShapesVisible(1, true);
  27. plot.setRenderer(renderer);
  28. jPanel1.setLayout(new java.awt.BorderLayout());
  29. jPanel1.add(CP,BorderLayout.CENTER);
  30. jPanel1.validate();
  31. }

Решение задачи: «Анимированый график»

textual
Листинг программы
  1. private double f(double x, double v){
  2.         return (v / x - v * v);
  3.     }
  4.  
  5.     XYChart.Series series = new XYChart.Series();
  6.     XYChart.Series series1 = new XYChart.Series();
  7.     XYChart.Series series2 = new XYChart.Series();
  8.     XYChart.Series series3 = new XYChart.Series();
  9.  
  10.     private void longProcess(){
  11.         this.text.setText(Integer.toString(digitCount++));
  12.         while(x <= counter % 10){
  13.             vnew = v + f(x,v) * dx;
  14.             ynew = y + vnew * dx;
  15.             y = ynew;
  16.             v = vnew;
  17.             if (h % 70 == 0)
  18.             {
  19.                 this.series.getData().addAll(new XYChart.Data(Double.toString(x), y));
  20.                 this.series2.getData().addAll(new XYChart.Data(Double.toString(x), v));
  21.                 this.series3.getData().addAll(new XYChart.Data(Double.toString(v), y));
  22.             }
  23.             this.series1.getData().addAll(new XYChart.Data(Double.toString(x), Math.log(x*x/4) * Math.log(Math.exp(1))+2));
  24.             x += dx;
  25.             h++;
  26.         }
  27.         counter = counter + 0.1;
  28.     }
  29.  
  30.     protected AnimationTimer at = new AnimationTimer(){
  31.         long lastUpdate = 0;
  32.         @Override
  33.         public void handle(long now) {
  34.             if (now - lastUpdate >= 20000000) {
  35.                 longProcess();
  36.                 lastUpdate = now;
  37.             }
  38.         }
  39.     };
  40.  
  41.     public void start(){
  42.         at.start();
  43.         this.graf.getData().addAll(series);
  44.         this.graf.getData().addAll(series1);
  45.         graf.setCreateSymbols(false);
  46.         graf.getCreateSymbols();
  47.         this.graf1.getData().addAll(series2);
  48.         this.graf2.getData().addAll(series3);
  49.     }
  50.  
  51.     public void stop(){
  52.         at.stop();
  53.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут