Java游戏在重置时不保存变量

时间:2014-12-15 08:38:03

标签: java swing user-interface

我有一个文本框,您可以在其中输入玩家名称,并将标签更改为输入的名称。我想存储它,以便在我重置游戏时(只需制作一个新的棋盘),它仍然会在标签中显示玩家名称。

这些是与名称相关的字段:

   private JTextField nameEnter = new JTextField("Enter name here");
   private JButton saveName = new JButton("Play");
   private JLabel namelabel = new JLabel("Player 1");
   private static String playername;

重置方法。

 public void reset(){

 GameBoard.this.setVisible(false);
 GameBoard.this.dispose();
 new GameBoard();
 score = 0;


}

当我调用一个新的GameBoard()时,会调用UpdateName()函数:

  public void UpdateName() {  

  saveName.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
      playername = nameEnter.getText();
      namelabel.setText(playername);
     }
    });
    }

1。)任何人都可以告诉我如何将名称带到下一个游戏,以便显示在标签中? 2.)(这里有点厚颜无耻)如果你能发现为什么重置方法没有处理最后一个GameBoard窗口,即使我问过它?

那将是一个很大的帮助。感谢。

4 个答案:

答案 0 :(得分:1)

您最好的选择可能是使用Java Preferences类存储它。这会将它存储在磁盘上的某个位置,这意味着它也可以在程序的调用之间存活。

每次有人更新玩家名称时,您都可以更改存储的值,然后在开始新游戏时,从存储的偏好中检索值。

这意味着即使你玩游戏,然后关闭应用程序,第二天再回来玩另一个游戏,你的名字仍然存在。

这是关于该主题的nice tutorial

答案 1 :(得分:0)

当你这样做时,你正在创建一个新的游戏板实例:

new GameBoard();

所以我认为你丢失了在旧游戏中输入的任何数据,称为“这个”。

创建新游戏时,运行 UpdateName()方法。在此方法中,您可以通过调用以下方式获取名称:

playername = nameEnter.getText();

然而,由于这是一款新游戏,文字字段 nameEnter 会不会为空?

正如chiastic-security所说,你可能希望在游戏之间保存这些细节。 在您调用重置之前,您可以调用保存方法&在某处保存细节。这样,当您创建新游戏时,您可以加载您的详细信息。

关于您的结束问题, dispose()仅释放资源。请参阅最佳答案java swing program not closing after dispose is called on last window

也许看看 Gameboard.this.SetVisible(false)

答案 2 :(得分:0)

我希望得到一个处理数据保存和处理的正确模型。如果这样做,您可以创建一个新的GameBoard并从模型类中检索数据。

答案 3 :(得分:0)

问题是您正在调用dispose(),将代码更改为。

public void reset(){
 GameBoard.this.setVisible(false);

String tempName = GameBoard.this.nameLabel.getText();

 GameBoard.this.dispose();

 GameBoard gb= new GameBoard("Constructor Without Taking Name");
 gb.nameLabel.setText(tempName);

 score = 0;
}

建议:不要在构造函数中定义所有内容,并根据需要逐个调用它,并在重置时GameBoard不要刷新框架或窗口只刷新因变量。