【发布时间】:2015-02-06 15:18:06
【问题描述】:
我正在为班级制作井字游戏,玩家必须是对象。我正在为 GUI 使用 windowbuilder,在这方面,我们必须修改播放器的名称(播放器对象的一部分)。在另一个与播放器和菜单类分开的类中,我们必须访问播放器的对象以使用 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。
【问题讨论】:
-
为什么不在 GUI 类中创建 Player 对象字段
-
你的游戏变量仍然是一个本地变量!请重新阅读答案。而且您需要显示更多代码。代码不多,但更多。您正在调用
getMenuName(),就好像它是保存您的 JLabel 的同一类中的一个方法,我们不知道它是否存在,但 Java 编译器(正确地)告诉您它不是。您只能在其类具有该方法的对象上调用该方法。 -
您的问题与 Swing 无关,而与核心 Java 最基本的问题有关,即理解变量、引用和方法。例如,如果一个类具有
getMenuName(),并且您需要调用此方法,则需要在该类的 instance 上调用它。你不能像你试图做的那样什么都不做。在需要的地方获取必要的变量,然后调用方法。