我正在为一个班级做一个tic tac toe游戏,玩家必须是一个对象。我正在使用windowbuilder用于GUI,在那里,我们必须修改玩家的名字(玩家对象的一部分)。在另一个与玩家和菜单类分开的类中,我们必须访问玩家的obect以使用getter获取名称,以在屏幕上显示它。我需要知道如何从另一个类修改对象。
播放器类中的构造函数:
public Player(String player, int initialGamesWon) {
playerName = player;
gamesWon = initialGamesWon;
}
按下开始时菜单会发生什么:
public void actionPerformed(ActionEvent arg0) {
GameBoard game = new GameBoard();
game.main(null);
String newPlayerName = playersName.getText();
Player player1 = new Player(newPlayerName);
}
在这里的菜单代码中,我们没有使用默认构造函数,但它类似,它只是将初始游戏设置为0。 在游戏板代码中,我们想要的标签是玩家的名字:
JLabel lblNewLabel_1 = new JLabel(player1.getPlayerName());
这是我们得到错误的地方,因为此类中的player1对象未声明。
编辑:我们已经达到了可以在菜单中制作新播放器并更改其名称的程度,如下所示: public void actionPerformed(ActionEvent arg0) {
GameBoard game = new GameBoard();
game.main(null);
String newPlayerName = playersName.getText();
setPlayerName(newPlayerName);
}
以下是菜单类中适用的其他方法
public void setPlayerName(String newName) {
player1.changeName(playersName.getText());
}
public String getMenuName() {
return player1.getPlayerName();
}
以下是我在游戏板上的代码,但仍无效:
JLabel lblNewLabel_1 = new JLabel(getMenuName());
但是,此处未声明getMenuName。
答案 0 :(得分:1)
您的GUI需要setPlayer1Name(String name)
方法,并且您的Player类需要playerName字段的get和set方法。 Control类将从用户获取名称,将设置Player的名称。然后,控件可以设置GUI的名称显示,或者如果GUI(视图)有一个连接到播放器的监听器,它可以在设置或更改播放器的名称时自动设置名称
请注意,此代码的问题是:
public void actionPerformed(ActionEvent arg0) {
GameBoard game = new GameBoard(); // **** local variable
game.main(null);
String newPlayerName = playersName.getText();
Player player1 = new Player(newPlayerName); // **** local variable
}
您将两个关键变量声明为方法的本地变量 - 它们对程序的其余部分完全不可见,这显然永远不会起作用。您需要在此处使用字段,而不是本地变量。
反之,做......,
public class FooClass {
private Player player1;
private GameBoard game;
private JTextField playersName;
private JLabel lblNewLabel1 = new JLabel();
public FooClass() {
JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
game = new GameBoard(); // field
game.main(null);
String newPlayerName = playersName.getText();
player1 = new Player(newPlayerName); // field
lblNewLabel1.setText(newPlayerName); // set label
}
});
}
}
答案 1 :(得分:0)
它们是两个不同的类,因为您正在创建该类的对象,然后通过使用您创建的新对象来调用它的变量或方法,所以:
Player player1 = new Player("player",0); // creating object
String PName = player1.playerName; //stores the name of player1 in PName.
System.out.println(player1.gamesWon); //outputs games won
如果要更改该名称,则需要在Player类中创建一个执行该操作的方法
public void reName(String newName)
{
playerName = newName;
}
然后从另一个类
调用该方法Player player1 = new Player("player",0); // creating object
player1.reName("Awesome");
您需要用来更改或使用Player类的任何方法都会进入该类,然后您只需调用方法..您可以重置分数或重命名或在该类中执行任何操作,只需创建一个方法,然后打电话给它。