由于我正在学习JavaFX2的新的世界我偶然在另一个恼人的问题。 我正在开发具有多个场景(〜10个场景)的程序。 为此,我创建了一个小型的类是这样的:
public class SceneSelector {
...
public void setScene(Stage stage, String fxmlfilename, ObservableList ol) throws Exception{
String s = "../" + fxmlfilename;
Parent root = FXMLLoader.load(getClass().getResource(s));
root.setUserData(ol);
Scene scene = new Scene(root);
stage.setScene(scene);
//show the stage
stage.show();
}
}
这个类的工作为场景之间的切换不够好。 现在的问题是,我有时需要从场景1数据传递到第二幕:。 我试图通过设置这样做setUserData()
的新场面basicly工作exept一两件事。 我怎样才能获得用户数据时,新的场景将被初始化beeing? (因为节点仍然是空当时)
在代码SCENE1:
//Code connected to a button that opens the new Scene
private void openLabID(ActionEvent event) throws Exception {
final Stage primaryStage = (Stage) btnNewScene.getScene().getWindow();
ObservableList<Koe> olAfTeWerkenKoeien = DA_Koe.getAfTeWerkenKoeien();
ss.setScene(primaryStage, "GUI/scenes/koe/Koe.fxml", olAfTeWerkenKoeien);
}
在代码SCENE2:
public void initialize(URL url, ResourceBundle rb) {
Scene s = lbl.getScene();
ObservableList<Koe> olAfTeWerkenKoeien = (ObservableList<Koe>) s.getRoot().getUserData();
System.out.println(olAfTeWerkenKoeien.size());
}
当然景S在这一点上给出了一个空值(因为LBL在这一点零),所以我不知道,有没有被解雇beeing之后初始化方法?
当我这个代码附加到第二幕:一个按钮,它就像一个魅力,但它应该会自动加载。
编辑:与setMyData数据()方法是没有问题的,然而检索它的设置:
public ObservableList<Koe> getMyData() {
return this.myData;
}
我怎样才能获得CustomScene对象时,控制器初始化? 下面,因为这样做,这将导致一个NullPointerException(因为btnSluiten没有初始化,只是还没有):
@Override
public void initialize(URL url, ResourceBundle rb) {
...
Stage stage = (Stage) btnSluiten.getScene().getWindow();
CustomScene cs = (CustomScene) stage.getScene();
ObservableList<Koe> olKoe = cs.getMyData();
System.out.println(olKoe.size());
}