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

时间:2015-02-06 15:18:07

标签: java class object

我正在为一个班级做一个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。

2 个答案:

答案 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类的任何方法都会进入该类,然后您只需调用方法..您可以重置分数或重命名或在该类中执行任何操作,只需创建一个方法,然后打电话给它。