GuessGame无法获得输出消息的程序

时间:2014-12-01 19:51:04

标签: java swing

我把寡妇和按钮放到了GUI中,但对于我的生活,我无法得到任何输出。我想输入一个猜测,并从游戏产生的随机数。我想告诉我,我是否太高,太低或正确。此外,如果不正确,它应该告诉我我是暖还是冷。如果有人能指出我正确的方向,我将不胜感激。我不知道我在这方面做错了什么。我研究了不同的主题,但解决这个问题的方法与我想要的不相符。

以下是代码:

//all necessary imports

public class GuessGame extends JFrame 
{
    private static final long serialVersionUID = 1L;
    private JFrame mainFrame;
    private JTextField guessField;
    private JLabel message1;
    private JLabel message2;
    private JLabel message3;
    private JLabel message4;
    private JLabel guessLabel;
    private JLabel tooHigh;
    private JLabel tooLow;
    private JButton guessButton;
    private JButton newGame;
    private JButton exitButton;
    private int randomNum = 0;
    private final int MAX_NUM = 1000;
    private final int MIN_NUM = 1;
    private int guessCount;
    private int lastDistance;

    public GuessGame()
    {
        mainFrame = new JFrame();
        guessField = new JTextField(4);
        message4 = new JLabel("I have a number between 1 and 1000 -- can you guess my number?") ;
        guessLabel = new JLabel("Please Enter Your Guess:");


        guessButton = new JButton("Guess");
        newGame = new JButton("New Game");
        exitButton = new JButton("Exit");

        Container c = mainFrame.getContentPane();
        c.setLayout(new FlowLayout());
        c.setBackground(Color.CYAN);

        c.add(message4);
        c.add(guessLabel);
        c.add(guessField);
        c.add(guessButton);
        c.add(newGame);
        c.add(exitButton);

        newGame.setMnemonic('N');
        exitButton.setMnemonic('E');
        guessButton.setMnemonic('G');

        mainFrame.setSize(420, 300);//Sets width and height of Window
        mainFrame.setVisible(true);//Allows GUI to be visible
        mainFrame.addWindowListener(new WindowAdapter()

        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        GuessButtonsHandler gHandler = new GuessButtonsHandler();
        guessField.addActionListener(gHandler);

        ExitButtonsHandler eHandler = new ExitButtonsHandler();
        exitButton.addActionListener(eHandler);

        NewGameButtonsHandler nHandler = new NewGameButtonsHandler();
        newGame.addActionListener(nHandler);
    }

    class GuessButtonsHandler implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {

            Random rand = new Random();

            int guess = 0;
            int currDistance = 0;
            boolean correct = false;
            guess = Integer.parseInt(guessField.getText());//Converts String to Integer

            if(guessCount == 0)
            {
                lastDistance = MAX_NUM;
            }

            if(guess >= MIN_NUM && guess <= MAX_NUM)
            {
                guessCount += 1;
            }

            if(guess > randomNum)
            {
                 tooHigh.setText("Number To High!!!");
                 guessCount += 1;
            }

            else if(guess > randomNum)
            {
                 tooLow.setText("Number To Low!!!");
                 guessCount += 1;
            }

            else 
            {
                correct = true;
                message2.setText("Correct!!!");
                message2.setBackground(Color.GREEN);
                guessField.setEditable(false);
            }

            if(!correct)
            {
                currDistance = Math.abs(guess - randomNum);
            }

            if(currDistance <= lastDistance)
            {
                message3.setText("You are getting warmer!!!");
                mainFrame.add(message3).setBackground(Color.RED);

            }

            else
            {
                message4.setText("You are getting colder!!!");
                mainFrame.add(message4).setBackground(Color.BLUE);
            }

                lastDistance = currDistance;
                randomNum = rand.nextInt(1000) + 1;
        }

    }

    class NewGameButtonsHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            Random rand = new Random();
            randomNum = rand.nextInt(1000) + 1;
            guessCount = 0;
        }
    }

    class ExitButtonsHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    }
}

public class GuessGameTest {

    public static void main(String[] args) 
    {
        new GuessGame();
    }
}

1 个答案:

答案 0 :(得分:4)

你需要:

  1. gHandler作为监听器添加到按钮中,而不仅仅是文本字段:

    guessField.addActionListener(gHandler);
    guessButton.addActionListener(gHandler);
    

    将它保留在文本字段中也是一个好主意:然后按下输入也可以触发猜测,而不仅仅是单击按钮(此部分实际上在您的代码中有效)。

  2. 您需要初始化邮件标签,并将其添加到某处。您已添加注释,但缺少初始化。

  3. 您并不需要为所有可能的消息添加标签。您希望一次只显示过高,过低或正确猜测的消息。不是两个或两个以上同时。所以一个字段就够了,只需设置正确的文字即可。

  4. 检查数字太低时,您的条件会被反转。

  5. 每次猜测后都会产生一个新的随机数,所以&#34;变暖了#34;消息不是很有用。此外,每次需要新的随机数时,您都不需要创建新的Random对象。

  6. 也可能是其他人,但希望这些可以帮助你前进。