Java猜谜游戏

Java猜谜游戏,java,Java,我正试图用Java编写一个程序,它取1-1000之间的一个随机数,然后随着猜测的进行,背景颜色会变为蓝色(冷)或红色(暖)。我不熟悉JavaGUI,但我认为其余的逻辑是正确的,不确定。它可以编译,但“猜测”按钮不起作用。任何指导都将不胜感激 package guessGame; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.color.*; import java.util.Ra

我正试图用Java编写一个程序,它取1-1000之间的一个随机数,然后随着猜测的进行,背景颜色会变为蓝色(冷)或红色(暖)。我不熟悉JavaGUI,但我认为其余的逻辑是正确的,不确定。它可以编译,但“猜测”按钮不起作用。任何指导都将不胜感激

package guessGame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.color.*;
import java.util.Random;


import java.util.Random;
import java.util.logging.FileHandler;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class GuessGame extends JFrame
{
    private JFrame mainFrame;
    private JButton GuessButton;
    private JButton QuitButton;
    private JLabel prompt1, prompt2;
    private JTextField userInput;
    private JLabel comment = new JLabel("What is your destiny?");
    private JLabel comment2 = new JLabel (" ");
    //private int number, guessCount;
    //private int lastGuess;
    private int randomNumber;
    private Color background;


    public GuessGame()
    {
        mainFrame = new JFrame ("Guessing Game!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Creates components
        GuessButton = new JButton("Guess");
        QuitButton  = new JButton("Quit");
        prompt1 = new JLabel("I have a number between 1 and 1000.");
        prompt2 = new JLabel("Can you guess my number? Enter your Guess:");
        comment = new JLabel ("What is your destiny?");
        comment2 = new JLabel (" ");
        userInput = new JTextField(5);
        //userInput.addActionListener(new GuessHandler());

        //content pane
        Container c = mainFrame.getContentPane();
        c.setLayout(new FlowLayout());

        //adding component to the pane
        c.add(prompt1);
        c.add(prompt2);
        c.add(userInput);
        c.add(comment2);
        c.add(GuessButton);
        c.add(QuitButton);
        c.add(comment);

        GuessButton.setMnemonic('G');
        QuitButton.setMnemonic('Q');

        mainFrame.setSize(300,200);
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setVisible(true);
        mainFrame.setResizable(false);

        // define and register window event handler
    //  mainFrame.addWindowListener(new WindowAdapter() {
    //      public void windowClosing(WindowEvent e) 
    //      { System.exit(0); }
    //  });

        //creating the handler
        GuessButtonHandler ghandler = new GuessButtonHandler(); //instantiate new object
        GuessButton.addActionListener(ghandler); // add event listener

        QuitButtonHandler qhandler = new QuitButtonHandler(); 
        QuitButton.addActionListener(qhandler); 



    }

    public void paint (Graphics g)
    {
        super.paint(g);
        setBackground(background);
    }

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

    class GuessButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            int getUserInput=0;
            int diff;
            int Difference;
            randomNumber = new Random().nextInt(1001);
            try {
                getUserInput = Integer.parseInt(
                        userInput.getText().trim());
            } catch (NumberFormatException ex){
                comment.setText("Enter a VALID number!");
                return;
            }
            if (getUserInput == randomNumber){
                JOptionPane.showMessageDialog(null, "CONGRATULATIONS! You got it!!",
                        "Random Number: " + randomNumber, 
                        JOptionPane.INFORMATION_MESSAGE);
                randomNumber = new Random().nextInt(1000) + 1;
                return;
            }
            if (getUserInput > randomNumber){
                comment.setText( "Too High. Try a lower number." );
                diff=getUserInput - randomNumber;
                Difference=Math.abs(diff);
            } else {
                comment.setText( "Too Low. Try a higher number." );
                diff=randomNumber - getUserInput;
                Difference=Math.abs(diff);
            }

            if(Difference<=25){
                comment2.setText("Cold");
                setBackgroundColor(Color.blue);
            }

            if(Difference<=10){
                comment2.setText("Warm");
                setBackgroundColor(Color.red);
            }

            else {
            }
        }
        private void setBackgroundColor(Color color) {
               setBackgroundColor(color);
            }
    }


    public static void main(String args[]) {
        //instantiate gueesgame object
        GuessGame app = new GuessGame();

    }
}
包猜游戏;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.awt.color.*;
导入java.util.Random;
导入java.util.Random;
导入java.util.logging.FileHandler;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
公共类猜谜游戏扩展JFrame
{
专用JFrame主机;
私有JButton按钮;
私有JButton按钮;
私人JLabel prompt1、prompt2;
私有JTextField用户输入;
私人JLabel comment=newjlabel(“你的命运是什么?”);
私有JLabel comment2=新JLabel(“”);
//私有整数,猜测计数;
//私人猜测;
私有整数随机数;
私人色彩背景;
公众猜谜游戏
{
大型机=新的JFrame(“猜谜游戏!”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建组件
猜按钮=新的JButton(“猜”);
QuitButton=新的JButton(“退出”);
prompt1=新的JLabel(“我有一个介于1和1000之间的数字”);
prompt2=新的JLabel(“你能猜出我的号码吗?输入你的猜测:”);
comment=newjlabel(“你的命运是什么?”);
注释2=新的JLabel(“”);
用户输入=新的JTextField(5);
//addActionListener(新的GuessHandler());
//内容窗格
容器c=mainFrame.getContentPane();
c、 setLayout(新的FlowLayout());
//将组件添加到窗格中
c、 增加(提示1);
c、 增加(提示2);
c、 添加(用户输入);
c、 添加(评注2);
c、 添加(猜测按钮);
c、 添加(退出按钮);
c、 添加(评论);
猜按钮。设置助记符('G');
QuitButton.setMnemonic('Q');
大型机。设置大小(300200);
mainFrame.setLocationRelativeTo(空);
mainFrame.setVisible(true);
mainFrame.setresizeable(false);
//定义并注册窗口事件处理程序
//mainFrame.addWindowListener(新的WindowAdapter(){
//公共无效窗口关闭(WindowEvent e)
//{System.exit(0);}
//  });
//创建处理程序
GuessButtonHandler ghandler=新的GuessButtonHandler();//实例化新对象
GuessButton.addActionListener(ghandler);//添加事件侦听器
QuitButtonHandler qhandler=新的QuitButtonHandler();
QuitButton.addActionListener(qhandler);
}
公共空间涂料(图g)
{
超级油漆(g);
挫折背景(背景);
}
类QuitButtonHandler实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
系统出口(0);
}
}
类GuessButtonHandler实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
int getUserInput=0;
int-diff;
智力差异;
randomNumber=new Random().nextInt(1001);
试一试{
getUserInput=Integer.parseInt(
userInput.getText().trim());
}捕获(NumberFormatException ex){
comment.setText(“输入有效数字!”);
返回;
}
如果(getUserInput==randomNumber){
showMessageDialog(空,“恭喜!你成功了!!”,
“随机数:”+随机数,
JOptionPane.INFORMATION(信息和消息);
随机数=新随机数().nextInt(1000)+1;
返回;
}
如果(getUserInput>randomNumber){
setText(“太高,请尝试一个较低的数字。”);
diff=getUserInput-随机数;
差异=数学绝对值(差异);
}否则{
setText(“太低,请尝试更高的数字。”);
diff=随机数-getUserInput;
差异=数学绝对值(差异);
}

如果(差异您的Swing组件比您需要的多,并且您似乎在操作另一组组件时将一组组件添加到帧中。例如,您有两个
JTextField
s、
fieldBox
userInput
。您将
userInput
添加到帧中,但选中
fieldBox
以查看猜测按钮h中的输入andler.由于
字段框
总是空的,
NumberFormatException
被异常处理程序捕获(它应该只捕获
NumberFormatException
,而不是
exception
),并且
注释
被更新为“输入有效数字!”但是,就像双文本区域一样,
comment
实际上并没有添加到框架中,
prompt1
prompt2
都是,所以您看不到更改

您有比您需要的更多的Swing组件,并且您似乎在操作另一组时正在向框架中添加一组。例如,您有两个
JTextField
s、
fieldBox
userInput
。您可以将
userInput
添加到帧中,但在猜测按钮处理程序中选中
fieldBox
以获取输入。由于
fieldBox
始终为空,
NumberFormatException
被异常处理程序捕获(它应该只捕获
NumberFormatException
,而不是
Exception
),并且
comment
更新为“输入有效数字!”。但是,与双文本区域一样,
comment
实际上并没有添加到框架中,
prompt1
prompt2
是,
private void setBackgroundColor(Color color) {
   setBackground(color);
}
randomNumber = new Random().nextInt(1001);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.show();
mainFrame.setVisible(true);
private Color background;
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.util.Random;

  public class GuessGame extends JFrame {
     private JTextField userInput;
     private JLabel comment = new JLabel("What is your destiny?");
     private JLabel comment2 = new JLabel(" ");

     private int randomNumber;

     public GuessGame() {
        super("Guessing Game!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Creates components
        JButton guessButton = new JButton("Guess");
        JButton quitButton = new JButton("Quit");
        JLabel prompt1 = new JLabel("I have a number between 1 and 1000.");
        JLabel prompt2 = new JLabel("Can you guess my number? Enter your Guess:");

        comment = new JLabel("What is your destiny?");
        comment2 = new JLabel(" ");
        userInput = new JTextField(5);

        //content pane
        Container c = getContentPane();
        setLayout(new FlowLayout());

        //adding component to the pane
        c.add(prompt1);
        c.add(prompt2);
        c.add(userInput);
        c.add(comment2);
        c.add(guessButton);
        c.add(quitButton);
        c.add(comment);

        guessButton.setMnemonic('G');
        quitButton.setMnemonic('Q');

        setSize(300, 200);
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);

        initializeNumber();

        //creating the handler
        GuessButtonHandler ghandler = new GuessButtonHandler(); //instantiate new object
        guessButton.addActionListener(ghandler); // add event listener

        QuitButtonHandler qhandler = new QuitButtonHandler();
        quitButton.addActionListener(qhandler);
     }

     private void initializeNumber() {
        randomNumber = new Random().nextInt(1000) + 1;
     }

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

     class GuessButtonHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
           int getUserInput;
           int diff;
           int Difference;
           try {
              getUserInput = Integer.parseInt(userInput.getText().trim());
              if (getUserInput == randomNumber) {
                 JOptionPane.showMessageDialog(null, "CONGRATULATIONS! You got it!!",
                         "Random Number: " + randomNumber,
                         JOptionPane.INFORMATION_MESSAGE);
                 initializeNumber();
                 return;
              }
              if (getUserInput > randomNumber) {
                 comment.setText("Too High. Try a lower number.");
                 diff = getUserInput - randomNumber;
                 Difference = Math.abs(diff);
              } else {
                 comment.setText("Too Low. Try a higher number.");
                 diff = randomNumber - getUserInput;
                 Difference = Math.abs(diff);
              }

              if (Difference <= 25) {
                 comment2.setText("Cold");
                 GuessGame.this.setBackgroundColor(Color.blue);
              }

              if (Difference <= 10) {
                 comment2.setText("Warm");
                 GuessGame.this.setBackgroundColor(Color.red);
              }
           } catch (NumberFormatException ex) {
              comment.setText("Enter a VALID number!");
           }
        }


     }

     private void setBackgroundColor(Color color) {
        getContentPane().setBackground(color);
     }

     public static void main(String args[]) {
        //instantiate gueesgame object
        GuessGame app = new GuessGame();

     }
  }