2017-04-02 14 views
0

Imリアルタイムでグラフをプロットして、発射体の軌跡の図を作成し、それが大気中をどのように動くかをシミュレートします。しかし、私がこれをしようとすると、何もグラフにプロットされますが、エラーはスローされません。javafxリアルタイムでグラフをプロットする方法

String seriesName = " "; 
    fireButton.setOnAction(e -> { 
     double initialVelValue = initialVelSlider.getValue(); 
     double angleValue = angleSlider.getValue(); 
     double gravityValue = gravitySlider.getValue(); 
     // Define series 
     XYChart.Series series = new XYChart.Series(); 
     series.setName(seriesName);  // Title of the series 
     graph.setLegendVisible(false); 
     long startTime = System.nanoTime(); 
     new AnimationTimer() { 
      @Override 
      public void handle(long now) { 
       double elapsedTime = (now - startTime)/1000000000d; 
       updateGraph(graph, initialVelValue, angleValue, gravityValue, 0, 
         projectileCalculations.getTotalDisplacement(initialVelValue, angleValue, gravityValue), 
         " ", elapsedTime); 

       System.out.println(elapsedTime); 
       if(elapsedTime > projectileCalculations.getTotalTime(initialVelValue, angleValue, gravityValue)) { 
        this.stop(); 
       } 
      } 
     }.start(); 

public void updateGraph(LineChart chart, double initialVel, double angle, double gravity, double start, double stop, String seriesName, double elapsedTime){ 
    double step = (stop-start)/100; // Divide the visible area into 1000 parts 

    int vMax = 0; 
    double vDisplacement = projectileCalculations.getVDisplacement(initialVel, angle, gravity, elapsedTime); 
    double hDisplacement = projectileCalculations.getHDisplacement(initialVel, angle, elapsedTime); 
    vMax = (int) (vDisplacement > vMax ? Math.ceil(vDisplacement) : vMax); 



    XYChart.Series series; 
    boolean newChart = false; 
    if (chart.getData().size() > 0) { 
     newChart = true; 
     series = (XYChart.Series) chart.getData().get(0); 
    } else { 
     series = new Series(); 
    } 

    series.getData().clear(); 
    series.getData().add(new XYChart.Data(hDisplacement, vDisplacement)); 


    ((NumberAxis) chart.getYAxis()).setAutoRanging(false); // Alow manual choosing of range 
    ((NumberAxis) chart.getYAxis()).setLowerBound(0); // Set start and stop of axis 
    ((NumberAxis) chart.getYAxis()).setUpperBound(vMax); 


    if (newChart) { 
     chart.getData().add(series); // Add data series to line chart 
    } 
}   

答えて

0

は、私はあなたが正確にやろうとしているのか理解していないが、空chart.getData()開始以来newChartはfalseで、何のシリーズは、データをチャートに追加しないされます。

私はちょうど1つのシリーズで最初に取り組むことを簡略化します。

+0

これは意味があります、あなたの答えに感謝します! –

+0

しかし、あなたの提案を追加した後、 "duplicate series added ..."というエラーが表示されるようになりました。 –

+0

updateGraphの外部にシリーズを追加するには、updateGraphメソッド内で現在のシリーズを選択してデータを追加します。 – minus

関連する問題