我有一个文本框,您可以在其中输入玩家名称,并将标签更改为输入的名称。我想存储它,以便在我重置游戏时(只需制作一个新的棋盘),它仍然会在标签中显示玩家名称。
这些是与名称相关的字段:
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窗口,即使我问过它?
那将是一个很大的帮助。感谢。
答案 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
不要刷新框架或窗口只刷新因变量。