动态切换JavaFX中的场景

时间:2016-04-09 20:30:27

标签: javafx

我想在两个不同的场景之间切换:

场景1:我加载不同图像的ScrollPane。

场景2:舞台是透明的,只有一个按钮可以返回场景1。

我能够为每个场景设置不同的fxml并在每次切换时创建一个新场景。

问题是当我从场景2切换到场景1时,场景1中加载的所有图像都不存在(这很明显,因为我正在创建一个新场景而不是“加载”Scene1。

当我从场景2切换到场景1时,有没有办法保持图像已经加载?

场景1

public class ControllerImpl implements Initializable, ControlledScreen {
ScreensController myController;
public void initialize(URL url, ResourceBundle rb) {
}
public void setScreenParent(ScreensController screenParent){
    myController = screenParent;
}
@FXML
private void goToScreen2(ActionEvent event) throws Exception{
    try {
        Stage primaryStage = (Stage) hideStage.getScene().getWindow();
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/arrow.fxml"));
        Parent root1 = fxmlLoader.load();
    primaryStage.setScene(new Scene(root));
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
@FXML
public javafx.scene.control.Button hideStage;

}

第二幕::

public class ControllerArrow implements Initializable{

ScreensController myController;

@Override
public void initialize(URL url, ResourceBundle rb) {
}

public void setScreenParent(ScreensController screenParent){
    myController = screenParent;
}

@FXML
public javafx.scene.control.Button showStage;

@FXML
private void goToScreen1(ActionEvent event) throws Exception{

    try{

        Stage stage = (Stage) showStage.getScene().getWindow();

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/sample.fxml"));
        Parent root = fxmlLoader.load();

    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

}

1 个答案:

答案 0 :(得分:1)

您可以切换舞台的场景,如:

Stage stage = (Stage) scene.getWindow();
stage.setScene(yourScene);

因此,当您拥有场景实例时,可以将其应用到舞台