【问题标题】:Java game not saving variable on resetJava游戏在重置时不保存变量
【发布时间】:2014-12-15 08:38:02
【问题描述】:

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

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

   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 窗口?

这将是一个很大的帮助。谢谢。

【问题讨论】:

  • 查看this question 了解默认 API 中可用的不同持久性 API 的讨论...
  • “如果你能发现为什么重置方法没有处理最后一个 GameBoard 窗口” - 你确实在它之后创建了一个全新的窗口,但你也可以使用static 参考资料...
  • 谢谢,是的,我使用的是静态实例。

标签: java swing user-interface


【解决方案1】:

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

您可以在每次有人更新玩家姓名时更改存储的值,然后当您开始新游戏时,从存储的首选项中检索该值。

意思是,即使你玩了一个游戏,然后关闭应用,第二天再回来玩另一个游戏,你的名字仍然会存在。

这是关于该主题的nice tutorial

【讨论】:

  • 好的,谢谢,我看看。我希望它不需要更改太多代码,因为我是新手。
【解决方案2】:

问题是你正在调用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 时不要刷新您的框架或窗口仅刷新您的因变量。

【讨论】:

  • 完美,谢谢!我只是想让它工作,但我会努力让它更有效率。
  • 但是,由于某种原因,窗口仍然没有处理。
  • 您的GameBoard 是否扩展了JFrame
【解决方案3】:

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

new GameBoard();

所以我认为您正在丢失在旧游戏中输入的任何数据,称为“this”。

当你创建一个新游戏时,你运行你的 UpdateName() 方法。在这种方法中,您可以通过调用来获取名称:

playername = nameEnter.getText();

但是由于这是一个新游戏,文本字段 nameEnter 将是空的,不是吗?

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

至于你的关闭问题,dispose() 只释放资源。查看最佳答案java swing program not closing after dispose is called on last window

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多