Ich mache eine Aufgabe auf Java Swing und ich mache ein GUI Guessing Game-Programm. Meine Frage ist, wenn ich den "rate" Knopf drücke passiert nichts, ich kann es nicht schließen indem ich auf X klicke Ich muss es mit Eclipse beenden. Was habe ich falsch gemacht? Korrigiert der GuessHandler den ActionListener oder habe ich etwas falsch gemacht?Kann Java Swing GUI Guessing Spiel nicht zur Arbeit
public class GuessingGameGui extends JFrame
{
public static final int WIDTH = 600;
public static final int HEIGHT = 400;
private JTextField theText;
private JLabel message;
private JPanel p1;
private JPanel p2;
private int guess;
private int numberOfTries = 0;
public GuessingGameGui()
{
super();
setSize(WIDTH, HEIGHT);
//set the window title to "Guessing Game"
setTitle("Guessing Game");
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.setBackground(Color.WHITE);
p1 = new JPanel();
p2 = new JPanel();
p1.setBackground(Color.WHITE);
p2.setBackground(Color.BLUE);
//"add a JButton called "Guess"
JButton guessButton = new JButton("Guess");
GuessHandler ghandler = new GuessHandler();
guessButton.addActionListener(ghandler);
p1.add(guessButton);
//The north panel will have a JLabel with the text "Guess a number between 1 and 10?"
JLabel label1 = new JLabel("Guess a number between 1 and 10?");
c.add(label1, BorderLayout.NORTH);
//The south panel will have a JLabel for displaying if the user guessed correctly or not
message = new JLabel("");
p2.add(message, BorderLayout.SOUTH);
c.add(p2, BorderLayout.SOUTH);
JPanel textPanel = new JPanel();
textPanel.setBackground(Color.LIGHT_GRAY);
//In the center panel, add a JTextField where the user can enter a number to guess
theText = new JTextField(10);
theText.setBackground(Color.WHITE);
textPanel.add(theText);
textPanel.add(p1);
c.add(textPanel, BorderLayout.CENTER);
}
public static void main(String[] args)
{
GuessingGameGui guessGame = new GuessingGameGui();
guessGame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guessGame.setSize(WIDTH, HEIGHT);
guessGame.setVisible(true);
}
class GuessHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e)
{
int numberToGuess = (int) (Math.random() * 10 + 1);
Scanner input = new Scanner (System.in);
boolean win = false;
while (win == false){
guess = input.nextInt();
numberOfTries++;
if (guess < 1 || guess > 10)
{
//Make the south panel background color RED if they entered an invalid number (not between 1 and 10)
p2.setBackground(Color.RED);
}
else if (guess == numberToGuess)
{
win = true;
//Make the south panel background color YELLOW if they guessed right
p2.setBackground(Color.YELLOW);
//and display "YOU GOT IT (n attempts)", where n is the number of attempts the user guessed
message.setText("YOU GOT IT (" +numberOfTries + "attempts)");
}
else
{
//Make the south panel background color GREY if they guessed wrong
p2.setBackground(Color.GRAY);
//display "Sorry try again"
message.setText("Sorry try again");
}
}
}
}
}
Da Ihr Programm gesperrt ist, denke ich, dass Sie in Ihrem Actionhandler eine Endlosschleife haben, so dass win niemals auf true gesetzt wird . Außerdem erhalten Sie Eingaben von der Konsole nicht von dem gewünschten JTextfield –