Java FX和FXML:将文本字段中的文本存储到一个场景中的字符串中,并将该字符串分配给下一个场景中的标签

时间:2017-11-21 17:51:44

标签: java string javafx fxml scenebuilder

我正在使用FXML和SceneBuilder进行Tic Tac Toe游戏。到目前为止,我有一个登录UI场景和一个游戏UI场景。在登录场景中,有两个文本区域,两个玩家输入他们的名字和一个开始按钮。按下开始按钮后,我将这些名称存储到一个字符串中,以便稍后使用。我测试了它,这是完美的,我打印了字符串及其输入的字符串。 我通过执行以下操作将它们存储到字符串中:

@FXML 
Text player1;

@FXML 
Text player2;

@FXML 
TextField player1text;

@FXML 
TextField player2text;

String player1name;

String player2name;


//ignore above this, I'm just showing my Textfield and text names to avoid confusion 

player1name = player1text.getText(); 

player2name = player2text.getText(); 

我的问题是切换到游戏场景时。当我按下开始按钮切换时,它切换但不是更新播放器名称,它变成空白,好像字符串(我刚刚初始化)是空的。我玩它试图在新场景中打印字符串,它说字符串是(null)...为什么这样?切换场景时Java是否清除内存?或者是什么?有没有办法解决?先感谢您。我将在下面附上我的代码。

这是我的HandleStartButton函数,它将场景切换到游戏场景,并在登录场景中按下开始按钮时更新字符串:

    @FXML
    private void handleStartButtonAction(ActionEvent event) throws IOException 
    {

    Stage stage;

    Parent root;

    //stores words in player1text field and player2text fields in Strings
    player1name = player1text.getText();
    player2name = player2text.getText();

    if (event.getSource() == StartButton)
    {
        //create new stage
        stage = new Stage();


        //load up FXML doc where game is
        root = FXMLLoader.load(getClass().getResource("GameUI.fxml"));
        stage.setScene(new Scene(root));
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.initOwner(StartButton.getScene().getWindow());
        stage.showAndWait();

    }

    else
    {
        stage=(Stage) StartButton.getScene().getWindow();
        stage.close();
    }

}

这是我的Play功能,当按下另一个开始按钮时,它会在游戏场景内启动游戏。这也使得瓦片能够被按下,并且它将球员名称设置为弦乐(这是因为它表示弦乐为空而不起作用)

@FXML
private void play(ActionEvent e)
{


    if(e.getSource() == gameButton)
    {
         //disable start button
         gameButton.setDisable(true);

         //sets text inside scene builder to strings 
         player1.setText(player1name)
         player2.setText(player2name);

         //enable all tic tac toe buttons
         TicButton1.setDisable(false);
         TicButton2.setDisable(false);
         TicButton3.setDisable(false);
         TicButton4.setDisable(false);
         TicButton5.setDisable(false);
         TicButton6.setDisable(false);
         TicButton7.setDisable(false);
         TicButton8.setDisable(false);
         TicButton9.setDisable(false);

         //calls playTicTacToe function
         playTicTacToe(e);
    }


}

最后,我将添加UI在sceneBuilder中的外观截图。任何帮助将非常感谢:)谢谢!

login UI

Game UI

0 个答案:

没有答案