当前位置: 首页 > 知识库问答 >
问题:

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

蔺霄
2023-03-14

我正在用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
        }
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;
}

欢迎提出任何建议。

共有1个答案

单于翰飞
2023-03-14

试试这个

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

边问:为什么getpane返回gameview,尽管gameview似乎是该方法的成员变量而不是局部变量?

 类似资料:
  • 作为一项任务,我正在用JavaFX制作一个老虎机程序。 如果我这样做: 我不明白为什么。在中,我确实有一个,为什么它不允许我将它添加到网格中? 编辑:我使用数组,因为一旦点击一个旋转按钮,就会显示一个随机形状(从0到5的随机索引)

  • 我对JavaFX很陌生。我正在使用网格窗格来保持我的项目在页面的中心,而不管窗口的大小是如何调整的。我想添加一个沿着顶部运行的菜单。我很快发现grid.settop(菜单栏)不是grid Pane的成员函数。有办法吗? 我可以在一个场景中创建两种不同类型的窗格吗?例如,一个用于居中项目的网格窗格和一个用于将菜单置于顶部的边框窗格?或者我应该使用CSS样式来获得顶部的菜单栏?

  • 我试图在冒号和字符或数字之间添加一个空格,如果已经没有空格: 我希望它是这样的: 我试过了,但没有成功。正则表达式在vim中插入空格 我可以用这个得到: X或: 0(它与冒号后面的空格不匹配,这很好): 但如果我替换为: 结果是这样的: 我正在使用http://www.gskinner.com/RegExr/测试模式。 我将使用PHPpreg_replace函数 非常感谢您的帮助。提前谢谢。

  • 如何使用Alembic或SQLAlchemy将一列接一列地添加到数据库中?这相当于SQL子句: 我也在邮件列表中尝试了这个建议,但没用。 虽然在查询时顺序无关紧要,但在SQL shell中,它有助于提高大型表的可读性。

  • 我在fxml文件中的VBox中有一个带有标签、文本字段和组合框的窗格。让我们称之为tempPane。在同一阶段,我有一个按钮。按下按钮后,我需要向VBox中添加一个与tempPane完全相同的窗格。这就是,向VBOX动态添加一个窗格。我可以将按钮、标签或文本字段等单个控件添加到VBox中,但在尝试添加此新窗格时无法获得相同的结果。 控制器代码的一部分: 我得到的错误是: 那么,为什么我会得到这个重

  • 如何在项目之间添加空格?有办法吗? 在这个图像上,白色是背景,黄色是JList的自定义,我希望每个项目都有一个像5像素的空间。 http://img819.imageshack.us/img819/5772/spacemd.png