2014-12-01 2 views
1

У меня есть вдова и кнопки в GUI, но для жизни меня я не могу ничего выводить. Я предполагаю ввести предположение и из случайного числа, которое генерирует игра. Предположим, мне сказать, слишком ли я слишком высокий, слишком низкий или правильный. Кроме того, если это неверно, я должен сказать, что я тепло или холодно. Если бы кто-нибудь мог указать мне в правильном направлении, я был бы благодарен. Я не знаю, что я делаю неправильно. Я исследовал разные темы, но с разными способами решения этой проблемы никто не соответствовал тому, что я искал.GuessGame не может получить программу для вывода сообщений

Вот код:

//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(); 
    } 
} 
+0

См. ['JFrame # pack'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#pack()) и [' JFrame # setDefaultCloseOperation'] (https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation(int)), чтобы сделать вашу жизнь проще – MadProgrammer

ответ

4

Вам нужно:

  1. Добавить gHandler в качестве слушателя к кнопке тоже, а не только в текстовое поле:

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

    Хранение его в текстовом поле тоже является хорошей идеей: тогда догадка может быть вызвана нажатием клавиши ввода, а не только нажатие кнопки (эта часть действительно работает в вашем коде).

  2. Вам необходимо инициализировать метки сообщений и добавить их где-нибудь. Вы добавили дополнения, но инициализации отсутствуют.

  3. Вам не нужны ярлыки для всех возможных сообщений. Вы хотите отображать только сообщение для слишком высокого, слишком низкого или правильного угадывания за раз. Не два или более одновременно. Так что одного поля достаточно, просто установите правильный текст.

  4. У вас есть условие, инвертированное при проверке слишком низких чисел.

  5. Вы производите новое случайное число после каждой догадки, поэтому сообщения «получать теплый» не очень полезны. Также вам не нужно создавать новый объект Random каждый раз, когда вы хотите получить новое случайное число.

Возможно, другие тоже, но, надеюсь, они помогут вам продвинуться вперед.

+0

Спасибо за помощь, я не мог понять, как сделайте это спасибо. –

+0

@KinGSwisser Добро пожаловать. :-) – kiheru

Смежные вопросы