Анимированый график - 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();
    }

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


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

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

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