设计图形界面:编写一个简单的模拟抽奖程序
程序运行后会随机生成5个1~16幸运号码,然后在图形界面提示“请您抽奖”,
等待用户输入5个1~16不重复的整数作为抽奖号码。
开始抽奖后,程序判断用户输入的号码与系统生成的幸运号码是否一致,给出用户中奖结果。
抽奖规则:如果用户输入的号码中分别有5、4、3个号码与幸运号码一致,则分别判定为一等奖、二等奖、三等奖,否则判定为未中奖。
要求给出必要的提示信息(如输入号码的数值范围限制)。提供关闭按钮,当用户希望结束抽奖时可以自主退出程序的运行。
package pk_02;
public class Test {
public static void main(String[] args) {
GameFrame gameFrame = new GameFrame();
//设置弹窗在中间显示
gameFrame.setLocationRelativeTo(null);
}
}
package pk_02;
import java.util.HashSet;
import java.util.Random;
// 生成5个随机数,通过HashSet原理进行查重
public class LuckyNumber {
public static HashSet<Integer> makeNumber() {
HashSet<Integer> hs = new HashSet<Integer>();
while(hs.size() != 5) {
Random random = new Random();
hs.add(random.nextInt(16) + 1);
}
return hs;
}
}
package pk_02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
public class GameFrame extends JFrame {
// 定义组件
JPanel jp0,jp1, jp2, jp3 ,jp4,jp5,jp6,jp7;
JLabel jlb0,jlb1, jlb2,jlb3,jlb4,jlb5,jlb6;
JButton jb1;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
// 构造函数
public GameFrame() {
jp0 = new JPanel();
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp4 = new JPanel();
jp5 = new JPanel();
jp6 = new JPanel();
jp7 = new JPanel();
jlb0 = new JLabel("请输入5个1-16的数字");
jlb1 = new JLabel("号码1");
jlb2 = new JLabel("号码2");
jlb3 = new JLabel("号码3");
jlb4 = new JLabel("号码4");
jlb5 = new JLabel("号码5");
jlb6 = new JLabel("结果");
jtf1 = new JTextField(10);
jtf2 = new JTextField(10);
jtf3 = new JTextField(10);
jtf4 = new JTextField(10);
jtf5 = new JTextField(10);
jtf6 = new JTextField(10);
jb1 = new JButton("输入完毕,开始抽奖");
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//先检查5个用户输入的数字,错误就弹窗提示
HashSet<Integer> userNumber = new HashSet<>();
userNumber.add(Integer.parseInt(jtf1.getText()));
userNumber.add(Integer.parseInt(jtf2.getText()));
userNumber.add(Integer.parseInt(jtf3.getText()));
userNumber.add(Integer.parseInt(jtf4.getText()));
userNumber.add(Integer.parseInt(jtf5.getText()));
if(userNumber.size() < 5) {
JOptionPane.showMessageDialog(null,"输入重复数字!","消息提示",JOptionPane.WARNING_MESSAGE);
}
else {
//拿着数字对照随机数,记录中奖个数
int count = 0;
HashSet<Integer> hs = LuckyNumber.makeNumber();
// 控制台打印每次生成的5个随机数
for(Integer z : hs) {
System.out.println(z);
}
System.out.println("-------");
for(Integer i : userNumber) {
for(Integer j : hs) {
if(i.equals(j)) {
count ++;
}
}
}
//按照中奖个数打印几等奖在结果框上
if(count == 5) {
jtf6.setText("一等奖");
}else if(count == 4) {
jtf6.setText("二等奖");
}else if(count == 3) {
jtf6.setText("三等奖");
}else{
jtf6.setText("未中奖");
}
}
}
});
this.setLayout(new GridLayout(4, 4,1,1));
// 加入各个组件
jp0.add(jlb0);
jp1.add(jlb1);
jp1.add(jtf1);
jp2.add(jlb2);
jp2.add(jtf2);
jp3.add(jlb3);
jp3.add(jtf3);
jp4.add(jlb4);
jp4.add(jtf4);
jp5.add(jlb5);
jp5.add(jtf5);
jp6.add(jb1);
jp7.add(jlb6);
jp7.add(jtf6);
// 加入到JFrame
this.add(jp0);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.add(jp5);
this.add(jp6);
this.add(jp7);
this.setSize(400, 300);
this.setTitle("抽奖游戏");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
运行后效果图
原文:https://www.cnblogs.com/Goodrain7/p/14743068.html