Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 15.10.2016
Сообщений: 8
1

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

27.03.2017, 14:51. Показов 766. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, допустим у меня есть график. Что использовать чтобы каждая точка рисовалась раз в полсекунды - тоесть что-то вроде анимации. В качестве библиотеки использую JFreeChart. В данном коде то, что я набросал - но, при создании следующей точки идет конфликт, так - как в JFreeChart не разрешается 2 однаковых серии. Делал изменение названия серии,но тогда выходит не то что нужно. Может посоветуете другую библиотеку?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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();
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2017, 14:51
Ответы с готовыми решениями:

Анимированый курсор
Я сделал анимированный курсор. Такой же точно как и стандартные те же песочные часы при прогрузке...

Анимированый слайдер
Всем привет, возникла небольшая проблема с созданием анимации на сайте, прошу Вашей помощи. Нужно...

Анимированый персонаж и классы
Доброго времени суток. Решил, что пора переходить на классы, а не на шкале времени. В принципе...

Анимированый значек сетевого подключения
добрый вечер, форумчане, имею вопрос - возможно ли в семерке вывести в трей отдельный значек...

2
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
02.04.2017, 22:48 2
как вариант, чарты из javaFx
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
 
public class MyChart extends Application {
    private boolean stop;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) {
        ObservableList<XYChart.Data<Number, Number>> datasFrom = FXCollections.observableArrayList();
        ObservableList<XYChart.Data<Number, Number>> datasTo = FXCollections.observableArrayList();
        for (int i = 0; i <= 100; i++) datasFrom.add(new XYChart.Data<>(i / 20d, Math.sin(i / 20.)));
 
        AreaChart<Number, Number> lineChart = new AreaChart<>(new NumberAxis(), new NumberAxis(), FXCollections.observableArrayList(new XYChart.Series<>(datasTo)));
        lineChart.setCreateSymbols(false);
 
        primaryStage.setScene(new Scene(lineChart));
        primaryStage.show();
 
        new Thread(() -> {
            int n = 0;
            while (!stop && datasFrom.size() != datasTo.size()) {
                datasTo.add(datasFrom.get(n));
                n++;
                try {Thread.sleep(500);} catch (InterruptedException ignored) {}
            }
        }).start();
    }
 
    @Override
    public void stop() throws Exception {
        stop = true;
        super.stop();
    }
}
0
0 / 0 / 1
Регистрация: 15.10.2016
Сообщений: 8
02.04.2017, 23:01  [ТС] 3
Спасибо, но уже сделал.. через AnimationTimer
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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();
    }
0
02.04.2017, 23:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2017, 23:01
Помогаю со студенческими работами здесь

Построить график функции y=x^2. График строится из отрезков и алгоритма Брезенхема
Построить график функции y=x^2. График строится с помощью отрезков. Для построения отрезков...

Составить график функции. Дана функция нужно построить график по полученным точкам
Помогите составить график функции. Дана функция нужно построить график по полученным точкам...

Как сделать дочерней ветвью дерева TreeView график или ссылку на график
Подскажите идею. Стоит следующая задача. Результатом выполнения программы является информационное...

Построить график экспоненты, декартов график в логарифмической шкале
построить график е в степени х,декартовый график в логорефмичной шкале????????????????????


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru