javafx如何实时绘制图表

javafx如何实时绘制图表,java,javafx,Java,Javafx,我正在试图实时绘制一张图表,以创建一个弹丸轨迹的图示,并模拟它在空中的运动。但是,当我尝试这样做时,图表上没有绘制任何内容,但不会抛出任何错误 String seriesName = " "; fireButton.setOnAction(e -> { double initialVelValue = initialVelSlider.getValue(); double angleValue = angleSlider.getValue()

我正在试图实时绘制一张图表,以创建一个弹丸轨迹的图示,并模拟它在空中的运动。但是,当我尝试这样做时,图表上没有绘制任何内容,但不会抛出任何错误

    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
    }
}           

我不明白您到底想做什么,但由于
chart.getData()
开始时为空
newChart
为假,并且没有向图表数据添加任何序列


首先,我会将此简化为仅使用1个系列来解决绘制多于1个系列的问题。

但是,在添加您的建议后,现在会出现一个错误,即“添加了重复系列”。。。有什么建议吗?在updateGraph外部添加序列,在updateGraph方法内部,您只需选择当前序列并向其中添加数据。唯一的问题是,当我执行此操作时,我需要将LineChart和序列seriesName解析到主菜单中运行的getScene()函数中,因此需要将其传递到start(),这是无法完成的