daily pastebin goal
46%
SHARE
TWEET

Untitled

a guest Mar 25th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package sample;
  2.  
  3. import javafx.animation.AnimationTimer;
  4. import javafx.application.Application;
  5. import javafx.event.ActionEvent;
  6. import javafx.event.EventHandler;
  7. import javafx.geometry.Insets;
  8. import javafx.geometry.Pos;
  9. import javafx.scene.Scene;
  10. import javafx.scene.chart.LineChart;
  11. import javafx.scene.chart.NumberAxis;
  12. import javafx.scene.chart.XYChart;
  13. import javafx.scene.control.Button;
  14. import javafx.scene.control.Slider;
  15. import javafx.scene.layout.StackPane;
  16. import javafx.scene.text.Font;
  17. import javafx.stage.Stage;
  18.  
  19. import java.awt.*;
  20. import java.util.Date;
  21. import java.util.concurrent.ConcurrentLinkedQueue;
  22. import java.util.concurrent.ExecutorService;
  23. import java.util.concurrent.Executors;
  24. import java.util.concurrent.ThreadFactory;
  25.  
  26. //короче, надо сдвигать по тому как увеличивается время. то есть сдвиг +t
  27.  
  28. public class Main extends Application {
  29.     private Date dateStart;
  30.     public static Date currD; //текущая дата
  31.     public static long currT; //текущее время
  32.     public static long dT_1; //первая граница дТ
  33.     public static long dT_2; //
  34.     public double w; //омега
  35.     public double w_forA; //омега для амплитудной модуляции
  36.     public double A; //амплитуда
  37.     public static final Slider slider1 = new Slider(0.0, 20.0, 10.0);
  38.     public static final Slider slider2 = new Slider(0.0, 20.0, 10.0);
  39.     public static Button refresh;
  40.     public static boolean updStage = false;
  41.  
  42.  
  43.     public static int MAX_DATA_POINTS = 500;
  44.     private int xSeriesData = 0;
  45.     private XYChart.Series<Number, Number> series1 = new XYChart.Series<>();
  46.     private XYChart.Series<Number, Number> series2 = new XYChart.Series<>();
  47.  
  48.     private ExecutorService executor;
  49.    // private ConcurrentLinkedQueue<Number> dataQ1 = new ConcurrentLinkedQueue<>();
  50.  
  51.     private NumberAxis xAxis;
  52.  
  53.     private void init(Stage primaryStage) {
  54.         Rectangle rec = new Rectangle(0, 0);
  55.  
  56.  
  57.         xAxis = new NumberAxis(0, MAX_DATA_POINTS, 100);
  58.         xAxis.setForceZeroInRange(false);
  59.         xAxis.setAutoRanging(false);
  60.         xAxis.setTickLabelsVisible(true); //
  61.         xAxis.setTickMarkVisible(true);
  62.         xAxis.setMinorTickVisible(true);
  63.         xAxis.setLabel("t (секунды)");
  64.  
  65.         NumberAxis yAxis = new NumberAxis();
  66.  
  67.         final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis);
  68.         lineChart.setAnimated(false);
  69.         lineChart.setTitle("АМПЛИТУДНАЯ МОДУЛЯЦИЯ");
  70.         lineChart.setHorizontalGridLinesVisible(true);
  71.         lineChart.setCreateSymbols(false);
  72.         series1.setName("Series 1");
  73.         // Add Chart Series
  74.         lineChart.getData().addAll(series1);
  75.         lineChart.setMaxSize(800, 200);
  76.         StackPane.setAlignment(lineChart, Pos.CENTER);
  77.  
  78.  
  79.         final LineChart<Number, Number> lineChart2 = new LineChart<Number, Number>(xAxis, yAxis);
  80.         lineChart2.setAnimated(false);
  81.         lineChart2.setTitle("ЧАСТОТНАЯ МОДУЛЯЦИЯ");
  82.         lineChart2.setHorizontalGridLinesVisible(true);
  83.         lineChart2.setCreateSymbols(false);
  84.         series2.setName("Series 2");
  85.         // Add Chart Series
  86.         lineChart2.getData().addAll(series2);
  87.         lineChart2.setMaxSize(800, 200);
  88.         StackPane.setAlignment(lineChart2, Pos.BOTTOM_CENTER);
  89.  
  90.  
  91.         javafx.scene.control.Label am_label = new javafx.scene.control.Label("АМПЛИТУДНАЯ МОДУЛЯЦИЯ");
  92.         am_label.setFont(Font.font("Thymes New Roman", 16));
  93.         StackPane.setAlignment(am_label, Pos.TOP_LEFT);
  94.         StackPane.setMargin(am_label, new Insets(40, 0, 0, 80));
  95.  
  96.         javafx.scene.control.Label am_label2 = new javafx.scene.control.Label("ЧАСТОТНАЯ МОДУЛЯЦИЯ");
  97.         am_label2.setFont(Font.font("Thymes New Roman", 16));
  98.         StackPane.setAlignment(am_label2, Pos.TOP_RIGHT);
  99.         StackPane.setMargin(am_label2, new Insets(40, 85, 0, 0));
  100.  
  101.  
  102.         //Slider slider1 = new Slider(0.0,20.0,10.0);
  103.         slider1.setShowTickMarks(true);
  104.         slider1.setShowTickLabels(true);
  105.         //slider1.setBlockIncrement(2.0);
  106.         slider1.setMajorTickUnit(5.0);
  107.         slider1.setMinorTickCount(4);
  108.         slider1.setSnapToTicks(true); //округление
  109.         slider1.setMinSize(300, 64);
  110.         slider1.setMaxSize(300, 64);
  111.         StackPane.setAlignment(slider1, Pos.TOP_LEFT);
  112.         StackPane.setMargin(slider1, new Insets(70, 0, 0, 40));
  113.  
  114.         //Slider slider2 = new Slider(0.0, 20.0, 10.0);
  115.         slider2.setShowTickMarks(true);
  116.         slider2.setShowTickLabels(true);
  117.         //slider1.setBlockIncrement(2.0);
  118.         slider2.setMajorTickUnit(5.0);
  119.         slider2.setMinorTickCount(4);
  120.         slider2.setSnapToTicks(true); //округление
  121.         slider2.setMinSize(300, 64);
  122.         slider2.setMaxSize(300, 64);
  123.         StackPane.setAlignment(slider2, Pos.TOP_RIGHT);
  124.         StackPane.setMargin(slider2, new Insets(70, 40, 0, 0));
  125.  
  126.         refresh = new Button("Обновить");
  127.         refresh.setFont(Font.font("Thymes New Roman", 14));
  128.         StackPane.setAlignment(refresh, Pos.TOP_CENTER);
  129.         StackPane.setMargin(refresh, new Insets(150, 0, 0, 0));
  130.         refresh.setOnAction(new EventHandler<ActionEvent>() {
  131.             @Override
  132.             public void handle(ActionEvent event) {
  133.                 updStage = true;
  134.             }
  135.         });
  136.  
  137.         StackPane root = new StackPane(lineChart, lineChart2, slider1, slider2, am_label, am_label2, refresh);
  138.         Scene scene = new Scene(root, 1000, 700);
  139.         primaryStage.setMinHeight(700);
  140.         primaryStage.setMinWidth(700);
  141.         primaryStage.setScene(scene);
  142.     }
  143.  
  144.  
  145.     @Override
  146.     public void start(Stage stage) {
  147.         stage.setTitle("Animated Line Chart Sample");
  148.         init(stage);
  149.         stage.show();
  150.         w_forA = Main.slider1.getValue();
  151.  
  152.         executor = Executors.newCachedThreadPool(new ThreadFactory() {
  153.             @Override
  154.             public Thread newThread(Runnable r) {
  155.  
  156.                 Thread thread = new Thread(r);
  157.                 thread.setDaemon(true);
  158.                 return thread;
  159.             }
  160.         });
  161.  
  162.  
  163.         dateStart = new Date();
  164.  
  165.         AddToQueue addToQueue = new AddToQueue();
  166.  
  167.         executor.execute(addToQueue);
  168.         //-- Prepare Timeline
  169.         prepareTimeline();
  170.     }
  171.  
  172.     private class AddToQueue implements Runnable {
  173.         public void run() {
  174.             try {
  175.                 if (updStage){
  176.                     executor.shutdown();
  177.                     updStage = false;
  178.                     //executor.execute();
  179.                 }
  180.                 dT_1 = currT;
  181.  
  182.                 currD = new Date();
  183.                 currT = (currD.getTime() - dateStart.getTime());
  184.                 //нужно округлить время
  185.                 currT = (currT / 50);
  186.  
  187.                 w = Main.slider2.getValue();
  188.                 A = Main.slider1.getValue();
  189.                 //dataQ1.add(Math.cos(currT * w));
  190.  
  191.  
  192.                 Thread.sleep(20);
  193.                 executor.execute(this);
  194.  
  195.  
  196.             } catch (InterruptedException ex) {
  197.                 ex.printStackTrace();
  198.             }
  199.         }
  200.     }
  201.  
  202.     //-- Timeline gets called in the JavaFX Main thread
  203.     private void prepareTimeline() {
  204.         // Every frame to take any data from queue and add to chart
  205.         new AnimationTimer() {
  206.             @Override
  207.             public void handle(long now) {
  208.                 //addDataToSeriesMe();
  209.                 addDataToSeriesMe2(); //!!!!!!!!!!!!!!!!!!!!!!!!!
  210.             }
  211.         }.start();
  212.     }
  213.  
  214.  
  215.     private void addDataToSeriesMe2() {
  216.         for (int i = 0; i < 10; i++) {
  217.             series1.getData().add(new XYChart.Data<>(currT, A*Math.cos(currT * w_forA))); //амплитудная
  218.             series2.getData().add(new XYChart.Data<>(currT, Math.cos(currT * w))); //частотная
  219.         }
  220.         // remove points to keep us at no more than MAX_DATA_POINTS
  221.         if ((series1.getData().size() > 9000)) {
  222.             dT_1 = (currT - dT_1)/20;
  223.             xAxis.setLowerBound(xAxis.getLowerBound() + 0.5); //+087
  224.             xAxis.setUpperBound(xAxis.getUpperBound() + 0.5); //+087
  225.         }
  226.  
  227.     }
  228.  
  229.     void restart(Stage stage) {
  230.         //cleanup();
  231.         start(stage);
  232.     }
  233.  
  234.     public static void main(String[] args) {
  235.         launch(args);
  236.     }
  237. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top