@Makaron3000

Почему не работает кнопка PlayAgain?

Все известна игра "Угадай число". Проблема в следующей: когда игрок угадывает число, появляется кнопка Play Again, которая должна перезапустить игру и пропасть опять, но она ни перезапускает игру ни пропадает.
import javax.swing.JFrame;
import java.awt.Window.Type;
import javax.swing.JLabel;

import java.awt.Dimension;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class GuesstingGame extends JFrame {
	private JTextField txtGuess;
	private JLabel lblOutput;
	private int theNumber;
	private JButton btnPlayAgain;
	
	public void checkGuess() { //Own method
		String guessText = txtGuess.getText();
		String message = "";
		int guess = Integer.parseInt(guessText);
		
		if (guess < theNumber)
			message = guess + " is too low. Try again.";
		else if (guess > theNumber)
			message = guess + " is too high. Try again.";
		else {
			message = guess + " is correct. You win!.";
	        btnPlayAgain.setVisible(true);
		}
				
		lblOutput.setText(message);
	}
	
	public void newGame() {  //Own method
		theNumber = (int)(Math.random() * 100 + 1);
	}
	
	public GuesstingGame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Ваше имя Hi-Lo Guessting Game");
		getContentPane().setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Ваше Имя Hi-Lo Guessing Game");
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 15));
		lblNewLabel.setBounds(0, 0, 434, 21);
		getContentPane().add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("Guess a number between 1 and 100:");
		lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(36, 45, 247, 21);
		getContentPane().add(lblNewLabel_1);
		
		txtGuess = new JTextField();
		txtGuess.setHorizontalAlignment(SwingConstants.RIGHT);
		txtGuess.setBounds(293, 47, 65, 19);
		getContentPane().add(txtGuess);
		txtGuess.setColumns(10);
		
		JButton btnGuess = new JButton("Guess!");
		btnGuess.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				checkGuess();
			}
		});
		btnGuess.setFont(new Font("Tahoma", Font.BOLD, 13));
		btnGuess.setBounds(168, 111, 98, 36);
		getContentPane().add(btnGuess);
		
		lblOutput = new JLabel("Enter a number above and click Guess!");
		lblOutput.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblOutput.setHorizontalAlignment(SwingConstants.CENTER);
		lblOutput.setBounds(0, 171, 434, 21);
		getContentPane().add(lblOutput);
		
		btnPlayAgain = new JButton("Play Again?");
		btnPlayAgain.setVisible(false);
		btnPlayAgain.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnPlayAgain.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newGame();
                                btnPlayAgain.setVisible(false);
			}
		});
		btnPlayAgain.setBounds(168, 203, 98, 36);
		getContentPane().add(btnPlayAgain);
	}

	public static void main(String[] args) {
		GuesstingGame theGame = new GuesstingGame();
		
		theGame.newGame();
		
		//Ключевые слова new Dimension() в круглых скобках метода
		//setSize() сообщают компилятору Java о создании объекта типа
		//Dimension с шириной 450 пикселей и высотой 300 пикселей
		theGame.setSize(new Dimension(450, 300));
		
		//Наконец, добавьте в метод main() следующую строку, чтобы
		//приложение появилось на экране:
		theGame.setVisible(true);
	}
}
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Вот у вас есть такой код:
btnPlayAgain.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newGame();
      }
    });

Я ни разу не писал на свинге, поэтому задам встречный вопрос: где в методе newGame() инструкции насчет того чтобы кнопка перезапустила игру и пропала? Я вижу только что там присваевается значение переменной theNumber...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 10:43
1500 руб./за проект
26 апр. 2024, в 10:21
1200 руб./в час