修改在其他 类 (Java) 中声明的对象的最佳方法
Best way to modify objects declared in other classes (Java)
我正在为 class 制作一个井字游戏,玩家必须是一个对象。我在 GUI 中使用 windowbuilder,在这种情况下,我们必须修改播放器的名称(播放器对象的一部分)。在与播放器和菜单 class 分开的另一个 class 中,我们必须使用 getter 访问播放器的对象以获取名称,以将其显示在屏幕上。我需要知道如何从另一个 class.
修改一个对象
播放器中的一个构造函数class:
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 对象未在此 class 中声明。
编辑:我们已经到了可以在菜单中创建新播放器并更改其名称的地步,如下所示:
public void actionPerformed(ActionEvent arg0) {
GameBoard game = new GameBoard();
game.main(null);
String newPlayerName = playersName.getText();
setPlayerName(newPlayerName);
}
菜单class中有其他适用的方法
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)
方法,您的播放器 class 需要 playerName 字段的获取和设置方法。控件 class 将从用户那里获取名称,将设置播放器的名称。然后控件可以设置名称的 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
}
您将两个关键变量声明为方法的局部变量——它们对程序的其余部分完全不可见,这显然永远不会起作用。你需要在这里使用字段,而不是本地 variable.s
所以相反,......
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
}
});
}
}
它们是 2 个不同的 class,因为您正在创建 class 的对象,然后您可以使用您创建的新对象调用它的变量或方法,所以:
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 class 中创建一个方法
public void reName(String newName)
{
playerName = newName;
}
然后从另一个调用方法class
Player player1 = new Player("player",0); // creating object
player1.reName("Awesome");
您需要用来更改或使用播放器 class 的任何方法都在那个 class 中,然后您只需调用这些方法..您可以重置分数或重命名或做class 中的任何内容,只需创建一个方法然后调用它即可。
我正在为 class 制作一个井字游戏,玩家必须是一个对象。我在 GUI 中使用 windowbuilder,在这种情况下,我们必须修改播放器的名称(播放器对象的一部分)。在与播放器和菜单 class 分开的另一个 class 中,我们必须使用 getter 访问播放器的对象以获取名称,以将其显示在屏幕上。我需要知道如何从另一个 class.
修改一个对象播放器中的一个构造函数class:
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 对象未在此 class 中声明。
编辑:我们已经到了可以在菜单中创建新播放器并更改其名称的地步,如下所示:
public void actionPerformed(ActionEvent arg0) {
GameBoard game = new GameBoard();
game.main(null);
String newPlayerName = playersName.getText();
setPlayerName(newPlayerName);
}
菜单class中有其他适用的方法
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)
方法,您的播放器 class 需要 playerName 字段的获取和设置方法。控件 class 将从用户那里获取名称,将设置播放器的名称。然后控件可以设置名称的 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
}
您将两个关键变量声明为方法的局部变量——它们对程序的其余部分完全不可见,这显然永远不会起作用。你需要在这里使用字段,而不是本地 variable.s
所以相反,......
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
}
});
}
}
它们是 2 个不同的 class,因为您正在创建 class 的对象,然后您可以使用您创建的新对象调用它的变量或方法,所以:
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 class 中创建一个方法
public void reName(String newName)
{
playerName = newName;
}
然后从另一个调用方法class
Player player1 = new Player("player",0); // creating object
player1.reName("Awesome");
您需要用来更改或使用播放器 class 的任何方法都在那个 class 中,然后您只需调用这些方法..您可以重置分数或重命名或做class 中的任何内容,只需创建一个方法然后调用它即可。