在学习 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();
}
}
这个类足以在场景之间切换。现在的问题是我有时需要将数据从 Scene1 传递到 Scene2。我试图通过设置setUserData()
新场景来做到这一点,该场景基本上适用于一件事。初始化新场景时如何获取用户数据?(因为当时节点仍然为空)
场景1的代码:
//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);
}
场景2的代码:
public void initialize(URL url, ResourceBundle rb) {
Scene s = lbl.getScene();
ObservableList<Koe> olAfTeWerkenKoeien = (ObservableList<Koe>) s.getRoot().getUserData();
System.out.println(olAfTeWerkenKoeien.size());
}
当然 Scene s 此时给出了一个空值(因为此时 lbl 为空),所以我想知道,是否有一种方法在初始化后立即被触发?
当我将此代码附加到 Scene2 上的按钮时,它就像一个魅力,但它应该自动加载。
编辑:使用 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());
}