gpt4 book ai didi

java - 修改其他类中声明的对象的最佳方法(Java)

转载 作者:行者123 更新时间:2023-12-01 11:57:09 25 4
gpt4 key购买 nike

我正在为类(class)制作井字游戏,玩家必须是一个对象。我在 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 需要一个 setPlayer1Name(String name) 方法,并且您的 Player 类需要为playerName 字段提供 get 和 set 方法。 Control 类将从用户处获取名称,并设置玩家的名称。然后,控件可以设置 GUI 的名称显示,或者如果 GUI( View )具有附加到播放器的监听器,则它可以在设置或更改播放器的名称时自动设置名称。

请注意,此代码的问题是:

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
}
});
}
}

关于java - 修改其他类中声明的对象的最佳方法(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28368942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com