Анимированый график - 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д