Я сделал очень простой GUI с некоторыми кнопками и стилем. На 2 из 4 сцен есть кнопка «Go Back», которая, как говорится, должна вернуть вас к предыдущей сцене. Обычно, когда сцена установлена в методе start, вы можете просто сделать
stage.setScene(scene);
Но у меня не установлена сцена в методе main start. Вместо этого мои сцены распределены по разным классам, например:
Main
public class Main extends Application {
Stage window;
Scene mainScene;
@Override
public void start(Stage stage) throws Exception {
window = stage;
window.setTitle("Main screen");
MainView mainView = new MainView(window);
window.setOnCloseRequest(e -> {
e.consume();
mainView.closeApplication(window);
});
mainScene = new Scene(mainView, 900, 600);
window.setScene(mainScene);
window.show();
}
public static void main(String[] args) {
launch(args);
}
}
MainView
public class MainView extends VBox {
public MainView(Stage window) {
setSpacing(10);
setPadding(new Insets(20,20,20,20));
setAlignment(Pos.CENTER);
setStyle("-fx-background-color: #1da1f2;");
Label title = new Label("Project 2.3 SE");
title.setTextFill(Color.WHITE);
title.setFont(new Font("Arial", 30));
Button chooseGame = new Button("Play");
Button options = new Button("Options");
Button close = new Button("Exit");
chooseGame.setMinWidth(100);
options.setMinWidth(100);
close.setMinWidth(100);
// Wanneer men een game kiest veranderd de scene naar een nieuwe scene
ChooseGameView chooseGameView = new ChooseGameView(window);
Scene chooseGameScene = new Scene(chooseGameView, 900, 600);
chooseGame.setOnAction(e -> {
window.setScene(chooseGameScene);
window.setTitle("Choose a game");
});
close.setOnAction(e -> {
closeApplication(window);
});
getChildren().addAll(title, chooseGame, options, close);
}
}
GameView
public class ChooseGameView extends VBox {
public ChooseGameView(Stage window) {
setSpacing(10);
setPadding(new Insets(20,20,20,20));
setAlignment(Pos.CENTER);
setStyle("-fx-background-color: #1da1f2;");
Label chooseGameTitle = new Label("Choose a game to play");
chooseGameTitle.setTextFill(Color.WHITE);
chooseGameTitle.setFont(new Font("Arial", 30));
Button chooseTTT = new Button("Tic Tac Toe");
Button reversi = new Button("Reversi");
Button back = new Button("Go back");
chooseTTT.setMinWidth(100);
reversi.setMinWidth(100);
back.setMinWidth(100);
ChooseGameModeView chooseGameModeView = new ChooseGameModeView(window);
Scene chooseGameModeViewScene = new Scene(chooseGameModeView, 900, 600);
chooseTTT.setOnAction(e -> {
window.setScene(chooseGameModeViewScene);
window.setTitle("Tic Tac Toe");
});
back.setOnAction(e -> {
System.out.println("Moet terug naar MainView");
});
getChildren().addAll(chooseGameTitle, chooseTTT, reversi, back);
}
}
В GameView у меня есть кнопка «Назад», которая должна вернуть вас в MainView. Я действительно не знаю, как это сделать? Я пробовал что-то вроде
MainView mainView = new MainView(window);
Scene scene = new Scene(mainView)
back.setOnAction(e -> {
window.setScene(scene);
});
Но это не работает и вылетает программа. Как я могу решить это?