在stage.show()之后向窗格中添加子项



我正在用JavaFX编写一个简单的游戏应用程序,并试图实现一个重启游戏功能。我最初的想法是删除gameView窗格中的子项,然后重新添加干净的子项。出于某种原因,这不起作用。在舞台已经显示后,是否有其他方法可以将子项添加/删除到场景中的窗格中?

启动方式:

public void start(Stage primaryStage) {
guessedLetters = new ArrayList<>();
wrongGuesses = new ArrayList<>();
gameView = getPane();
primaryStage.setTitle("Hangman");
Scene scene = new Scene(gameView);
primaryStage.setScene(scene);
//primaryStage.setResizable(false);
primaryStage.show();
primaryStage.setMinHeight(scene.getHeight());
primaryStage.setMinWidth(scene.getWidth());
primaryStage.sizeToScene();
}

复位逻辑:

private void reset() {
numMistakes = 0;
guessedLetters.clear();
wrongGuesses.clear();
gameView.getChildren().clear();
gameView = getPane();
// ToDo: figure out how to reset pane
}

getPane((初始化并返回新的游戏视图窗格:

private BorderPane getPane() {
// Text-input section
lblInput = new Label("Guess a letter: ");
tfInput = new TextField();
tfInput.setOnAction(e -> play());
guessInput = new HBox();
guessInput.getChildren().addAll(lblInput, tfInput);
guessInput.setAlignment(Pos.CENTER);

gallows = new Gallows();
gameBoard = buildGameBoard();
centerScreen = new VBox();
centerScreen.getChildren().addAll(gallows, gameBoard, guessInput);
centerScreen.setSpacing(10);
centerScreen.setAlignment(Pos.CENTER);
centerScreen.setPadding(new Insets(5, 5, 5, 5));
lblOutput = new Label();
lblOutput.setFont(Font.font("Georgia", 15));
gameView = new BorderPane();
gameView.setCenter(centerScreen);
gameView.setBottom(lblOutput);
BorderPane.setAlignment(lblOutput, Pos.CENTER);
return gameView;
}

如果没有,还有哪些其他方法可以重置窗口中的场景(不打开新窗口(?

欢迎提出任何建议。

试试这个

Stage stage = (Stage) gameView.getScene().getWindow();
gameView = getPane();
stage.setScene(gameView);

附带问题:为什么getPane返回gameView,尽管gameView似乎是该方法的成员变量而不是局部变量?

最新更新