我正在做Java Swing上的任務,並且正在製作GUI猜測遊戲程序。我的問題是當我按下「猜測」按鈕什麼也沒有發生,我不能通過點擊X來關閉它,我必須用Eclipse來終止它。我做錯了什麼? GuessHandler是否正確實現了ActionListener,還是我在那裏做錯了什麼?無法獲得Java Swing GUI猜測遊戲工作
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");
}
}
}
}
}
由於你的程序正在鎖定,我認爲你的actionhandler有一個無限循環,所以win永遠不會設置爲true 。你也從控制檯獲得輸入,而不是從你想要的JTextfield –