综合运用 GUI 编程相关语法,完成一个简单的猜数字游戏项目。
该程序随机在 1 到 1000 的范围中选择一个供用户猜测的整数。
界面上提供一个文本框来接收用户输入的猜测的数,如果用户猜得太大,则背景变为红色,如果猜得太小,背景变为蓝色。
用户猜对后,文本框变为 不可编辑,同时提示用户猜对了。界面上提供一个按钮,使用户可以重新开始这个游戏。在界 面上还需显示用户猜测的次数。
MyFrame类为图形界面编写类
MyListener类为监视器
Test类为主类
MyFrame类:
package com.java.demo5;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyFrame extends JFrame {
JLabel lab1,lab2,lab3,lab;
JButton btn1,btn2,btn3;
JTextField txt;
JPanel panel,btn;
int i=0;
MyFrame(String s){
init(s);
this.setBounds(300,300,300,200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(String s) {
this.setTitle(s);
lab1=new JLabel("你已猜测了"+i+"次",JLabel.CENTER);
this.add(lab1,BorderLayout.NORTH);
lab2=new JLabel("输入猜测的数");
lab=new JLabel("");
txt=new JTextField(10);
panel=new JPanel();
panel.add(lab2);
panel.add(txt);
panel.add(lab);
this.add(panel,BorderLayout.CENTER);
btn=new JPanel();
btn1=new JButton("确定");
btn2=new JButton("重新开始");
btn3=new JButton("退出");
btn.add(btn1);
btn.add(btn2);
btn.add(btn3);
this.add(btn,BorderLayout.SOUTH);
MyListener e=new MyListener(this);
btn1.addActionListener(e);
btn2.addActionListener(e);
btn3.addActionListener(e);
}
}
MyListener类:
package com.java.demo5;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class MyListener implements ActionListener{
MyFrame myframe;
int num=(int)(Math.random()*1000)+1;
public MyListener(MyFrame myframe) {
this.myframe=myframe;
}
public void text(MyFrame myframe) {
myframe.i++;
String txt1=myframe.txt.getText();
if(Integer.parseInt(txt1)<num) {
myframe.panel.setBackground(Color.blue);
myframe.lab.setText("太小!");
}
else if(Integer.parseInt(txt1)>num) {
myframe.panel.setBackground(Color.red);
myframe.lab.setText("太大!");
}
else {
JOptionPane.showMessageDialog(myframe,"恭喜你,猜对了!!!",
"恭喜了",JOptionPane.INFORMATION_MESSAGE);
}
myframe.lab1.setText("你已猜测了"+String.valueOf(myframe.i)+"次");
}
public void actionPerformed(ActionEvent e) {
System.out.println(num);
JButton btn=(JButton)e.getSource();
String str=btn.getText();
if(str.equals("确定")) {
this.text(myframe);
}
else if(str.equals("重新开始")) {
myframe.panel.setBackground(Color.white);
myframe.i=0;
myframe.lab1.setText(null);
myframe.txt.setText(null);
this.text(myframe);
}
else {
System.exit(0);
}
}
}
Test主类:
package com.java.demo5;
public class Test {
public static void main(String args[]) {
MyFrame frame=new MyFrame("猜数字小游戏");
}
}