目录
主要知识内容
知识内容 | 作用目的 |
swing | 窗体添加控件 |
awt | 设置样式,添加事件监听 |
Random | 获取随机数,使奖品随机 |
List | 存储id |
制作思路
- 实例化一个窗体,用于显示。
- 给窗体添加控件,容易想到的有按钮,文本框,标签等。
- 获取文本框中的内容(id或者抽奖码),判断是否重复抽奖。
- 在窗体中显示中奖信息
GUI实现
JLabel l1=new JLabel("每个id只能抽取一次");//标签组件
JLabel l2=new JLabel("请输入您的id:");
JLabel l3=new JLabel("");
JLabel l4=new JLabel("");
JButton b1=new JButton("开始抽奖");//按钮组件
JButton b2=new JButton("查看奖品");
JButton b3=new JButton("退出");
JTextField jtf=new JTextField();//文本框组件
jtf.setColumns(20);//设置文本框内容长度
l1.setBounds(120,20,300,50);//绝对坐标,大小
l1.setFont(new Font("宋体",Font.BOLD,26));//样式
l2.setBounds(10,320,110,30);
l2.setFont(new Font("宋体",Font.BOLD,15));
l3.setFont(new Font("宋体",Font.BOLD,15));
l4.setFont(new Font("宋体",Font.BOLD,13));
l3.setBounds(150,100,170,30);
l4.setBounds(150,130,170,30);
jtf.setBounds(130,320,120,30);
b1.setBounds(260,320,90,30);
b3.setBounds(355,320,70,30);
add(l1);//将组件加入到窗体里
add(l2);
add(l3);
add(l4);
add(b1);
add(b2);
add(b3);
add(jtf);
setBounds(320, 200, 500, 400);//设置窗体的坐标大小
//setUndecorated(true);//是否消除窗体边框
setLayout(null);//绝对布局
setVisible(true);//是否显示
实现随机抽取奖品
1.设置一个全局变量prize,用来保存奖品信息。
public String prize[]= {"过期牛奶一箱","二手牙刷一个","小编秘制奥利给一份","雷碧一瓶","并夕夕优惠券",
"半瓶开塞露","逍遥丸一粒","一袋旺仔牛逼糖","爆炒啤酒瓶一份"};//奖品信息
2.生成一个随机数(小于prize的长度)作为prize的索引,用一个字符串作为输出奖品信息的内容。
Random r=new Random();//随机奖品
int num=r.nextInt(prize.length);
String p=prize[num];
3.在GUI实现中看到,窗体里有一个抽奖按钮,我们想通过点击这个按钮实现抽奖行为,所以为这个按钮添加事件监听new ActionListener(),点击按钮,显示中奖信息。
b1.addActionListener(new ActionListener() {//添加监听
@Override
public void actionPerformed(ActionEvent e) {
l3.setText("您已成功参与抽奖!");
l3.setForeground(Color.GREEN);
Random r=new Random();//随机奖品
int num=r.nextInt(prize.length)+1;
String p=prize[num];
l5.setText("恭喜您获得"+p);
}
});
4.判断输入的id有没有参与过抽奖,我们不知道会有几个id参与抽奖,所以我们选择用List存储已经参与抽奖的id。
if(list.contains(jtf.getText())) {//判断是否存在该id
l3.setText("该id已参与抽奖!");
l3.setForeground(Color.RED);//前景色
}else {
list.add(jtf.getText());
}
全部代码
为了方便大家直接使用,我将全部代码写在一个类里,只需要复制全部代码就可以实现抽奖。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Frame_1 extends JFrame {
/**
* @author ZYY
*/
private static final long serialVersionUID = 1L;
public List<String> list=new ArrayList<String>();
public String prize[]= {"奖品","过期牛奶一箱","二手牙刷一个","小编秘制奥利给一份","雷碧一瓶","并夕夕优惠券",
"半瓶开塞露","逍遥丸一粒","一袋旺仔牛逼糖","爆炒啤酒瓶一份"};//奖品信息
public Frame_1() {
JLabel l1=new JLabel("每个id只能抽取一次");//标签组件
JLabel l2=new JLabel("请输入您的id:");
JLabel l3=new JLabel("");
JLabel l4=new JLabel("");
JButton b1=new JButton("开始抽奖");//按钮组件
JTextField jtf=new JTextField();//文本框组件
jtf.setColumns(20);//设置文本框内容长度
l1.setBounds(120,20,300,50);//绝对坐标,大小
l1.setFont(new Font("宋体",Font.BOLD,26));//样式
l2.setBounds(10,320,110,30);
l2.setFont(new Font("宋体",Font.BOLD,15));
l3.setFont(new Font("宋体",Font.BOLD,15));
l4.setFont(new Font("宋体",Font.BOLD,13));
l3.setBounds(150,100,170,30);
l4.setBounds(150,130,170,30);
jtf.setBounds(130,320,120,30);
b1.setBounds(260,320,90,30);
add(l1);//将组件加入到窗体里
add(l2);
add(l3);
add(l4);
add(b1);
add(jtf);
setBounds(320, 200, 500, 400);//设置窗体的坐标大小
//setUndecorated(true);//是否消除窗体边框
setLayout(null);//绝对布局
setVisible(true);//是否显示
b1.addActionListener(new ActionListener() {//添加监听
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(list.contains(jtf.getText())) {//判断是否存在该id
l3.setText("该id已参与抽奖!");
l4.setText("");
l3.setForeground(Color.RED);//前景色
}else {
list.add(jtf.getText());
l3.setText("您已成功参与抽奖!");
l3.setForeground(Color.GREEN);
Random r=new Random();//随机奖品
int num=r.nextInt(prize.length)+1;
String p=prize[num];
l4.setText("恭喜您获得"+p);
}
}
});
}
public static void main(String[] args) {
new Frame_1();
}
}
拓展提高
我们发现这个程序每次启动都会重置List的内容,并不能保存我们曾经参与抽奖的id,所以本例只是简易基础版,我们可以试着添加奖品公示效果,让我们看到奖品有什么,可以查看有哪个id曾经抽过奖。。。如果想学习进阶版,请参考:中级抽奖——java实现(通过IO流保存中奖名单)_无忧#的博客-CSDN博客