@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);
	}
}
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
Senior Junior Roo
Вот у вас есть такой код:
btnPlayAgain.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newGame();
      }
    });

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

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

Войти через центр авторизации
Похожие вопросы
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽
KOTELOV Санкт-Петербург
от 150 000 до 230 000 ₽