JavaFX, проблема при попытке динамически передать ряд данных линейной диаграммы в контроллер - PullRequest
0 голосов
/ 04 ноября 2019

Я работал над проблемой JavaFX. У меня есть простая программа, состоящая из основной сцены, которая изменяет подцены на основе TreeView. Одна из подсцен включает в себя линейную диаграмму. Мое намерение состоит в том, чтобы после запуска программы она выполняла некоторые вычисления в фоновом режиме и передавала XYChart.Series в линейную диаграмму. Однако мне не удается отобразить данные на графике. Код выглядит следующим образом:

Моя функция запуска (main пуста, кроме launch (args)):

public void start(Stage primaryStage) throws Exception{

    //Create main Scene
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("/PrimaryStage.fxml"));
    Parent root = loader.load();
    primaryStage.setTitle("Radial Turbine Design Suite");
    primaryStage.setScene(new Scene(root, 1280, 720));
    primaryStage.show();

    //Run calculations and create XYChart.Series
    PrelimSizingTurbine run1 = new PrelimSizingTurbine();
    run1.prelimSizingTurbine();
    XYChart.Series<Double, Double> prelimDataSeriesHub = run1.createSeries(run1.rotorHubContour, "Rotor Hub");

    //Access the SubScene with the LineChart and plot the series
    FXMLLoader newLoader = new FXMLLoader();
    newLoader.setLocation(getClass().getResource("/PreliminaryTurbineSizing_Geometry.fxml"));
    Parent root2 = newLoader.load();
    PreliminaryTurbineSizing_GeometryController controller = newLoader.getController();
    controller.preliminaryTurbineGeometry.getData().add(prelimDataSeriesHub);

}

Метод createSeries:

    public XYChart.Series<Double, Double> createSeries(Double[][] coords, String seriesName){
        XYChart.Series<Double, Double> series = new XYChart.Series<>();
        series.setName(seriesName);

        for(int i = 0; i < coords.length; i++){
            series.getData().add(new XYChart.Data(coords[i][0], coords[i][1]));
        }

        return series;
    }

ТогдаКонтроллер подцены с LineChart:

public class PreliminaryTurbineSizing_GeometryController implements Initializable {

    @FXML
    public LineChart<Double, Double> preliminaryTurbineGeometry;

    @FXML
    public NumberAxis xAxis;

    @FXML
    public NumberAxis yAxis;

    @FXML
    AnchorPane PreliminaryTurbineSizing_Geometry;

    @Override
    public void initialize(URL location, ResourceBundle resources){

    }
}

Интересно, похоже, я могу получить доступ к соответствующему контроллеру. Я попытался напечатать строку с того же контроллера, что и LineChart, и он работал нормально. Однако весь код, связанный с LineChart, похоже, игнорируется и не отображается на графике.

...