我一直在研究JavaFX问题。我有一个简单的程序,该程序包含基于TreeView更改SubScenes的主场景。子场景之一包括折线图。我的意图是,在启动程序后,它将在后台进行一些计算,并将XYChart.Series传递给折线图。但是,我无法使数据显示在图表上。代码如下:
我的启动函数(除启动(参数)之外,主函数为空):
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相关的代码似乎都被忽略了,并且没有显示在图表上。