Я делаю игру для игры в стиле tic tac для класса, и игрок должен быть изгибом. Я использую windowbuilder для GUI, и в этом мы должны изменить имя игрока (часть объекта игрока). В другом классе, отдельно от игрока и класса меню, мы должны получить доступ к предмету игрока, чтобы захватить имя, используя геттер, чтобы отобразить его на экране. Мне нужно знать, как изменить объект из другого класса.Лучший способ изменить объекты, объявленные в других классах (Java)
Конструктор в классе игрока:
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 не объявлен в этом классе.
EDIT: Мы дошли до точки, где я могу сделать новый плеер в меню, и изменить его название, как показано здесь:
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 не объявляется здесь.
Почему вы не делаете поле объекта Player в классе GUI – mgokgoz
Ваша переменная игры по-прежнему является ** локальной ** переменной! Пожалуйста, перечитайте ответы. И вам нужно показать больше кода. Не слишком много кода, но больше. Вы вызываете 'getMenuName()', как если бы это был метод того же класса, который содержит ваш JLabel, и мы понятия не имеем, есть оно или нет, но компилятор Java сообщает вам (правильно), что это не так. Вы можете вызвать метод только для объекта, класс которого имеет этот метод. –
Ваша проблема не имеет ничего общего с Swing и все, что связано с ядром Java, по самой простой, понимающей переменные, ссылки и методы. Например, если класс имеет 'getMenuName()', и вам нужно вызвать этот метод, вам нужно вызвать его на * экземпляр * этого класса. Вы не можете называть это ничем, поскольку вы пытаетесь это сделать. Получите необходимую переменную там, где она вам нужна, а затем вызовите метод. –