java做抽奖小程序_java实现的抽奖的小程序熟悉一下线程

package connection.thread.lottery;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Random;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class Lottery extends Thread{

private JLabel label1,label2,label3;

private JButton b1= new JButton("开始抽奖");

// 显示抽奖人

private JPanel jpanel1 = new JPanel();

// 显示奖品

private JPanel jpanel2 = new JPanel();

// 抽奖过程的操作者

private static Participator p = Participator.getParticipator();

private Random randoms;

// 名字随机

private static int random1 ;

// 奖品随机

private static int random2 ;

private Dimension dimension = new Dimension(80,50);

private Start start = null;

private int clickCount = 0;

public void init(){

randoms = new Random();

label1 = new JLabel("",JLabel.LEFT);

label2 = new JLabel("",JLabel.RIGHT);

label3 = new JLabel("奖品剩余"+p.prizeList.size()+"个",JLabel.CENTER);

label1.setPreferredSize(dimension);

label1.setMinimumSize(dimension);

label2.setPreferredSize(dimension);

label2.setMinimumSize(dimension);

label3.setPreferredSize(dimension);

label3.setMinimumSize(dimension);

jpanel2.add(label1);

jpanel2.add(label2);

jpanel2.add(label3);

jpanel2.setSize(100, 100);

jpanel1.add(b1);

b1.addActionListener(new StartL());

}

public void go(){

while(true){

try {

sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

if(p.runFlag) {

if(p.prizeList.size() > 0){

synchronized(this){

random1 = randoms.nextInt(p.nameList.size());

label1.setText(p.nameList.get(random1));

random2 = randoms.nextInt(p.prizeList.size());

label2.setText(p.prizeList.get(random2));

}

}

}

}

}

/**

* 抽奖按钮添加开始抽奖 和停止抽奖事件

* @author hanyd

*

*/

class StartL implements ActionListener{

public void actionPerformed(ActionEvent e) {

if(clickCount == 0){

// 第一次按下开始按钮时 线程启动

if(p.runFlag){

if (start == null)

// Lottery.this是内部类里边调用外部类实例的一种方式

start = new Start(Lottery.this);

}

} else {

// 停止抽奖按钮按下时

if(start != null){

// 设置抽奖开始与结束 并删除上次的中奖信息

p.removeOne(random1,random2);

label3.setText("奖品剩余"+p.prizeList.size()+"个");

}

// 显示按钮连续点击的不同文本 和奖品的剩余信息

if(clickCount > 0 && clickCount%2==0){

b1.setText("停止抽奖");

label3.setText("奖品剩余"+p.prizeList.size()+"个");

} else {

b1.setText("开始抽奖");

label3.setText("奖品剩余"+(p.prizeList.size()-1)+"个");

// 当奖品全部被抽走时 抽奖按钮设置为disable

if(p.prizeList.size() - 1 == 0){

b1.setText("抽奖结束");

b1.setEnabled(false);

}

}

}

clickCount++;

}

}

public static void main(String[] args) {

Lottery lottery = new Lottery();

JFrame frame = new JFrame();

frame.setLayout(new BorderLayout());

frame.setSize(400,300);

lottery.init();

frame.add(lottery.jpanel2,BorderLayout.NORTH);

frame.add(lottery.jpanel1,BorderLayout.CENTER);

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

frame.setVisible(true);

}

}

/**

* 抽奖按钮按下 线程启动

* @author hanyd

*

*/

class Start extends Thread{

private Lottery lottery = null;

public Start(Lottery lottery){

this.lottery = lottery;

start();

}

public void run(){

lottery.go();

}

}

package connection.thread.lottery;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Participator {

private static Participator participator = null;

// 开始抽奖和停止抽奖的判断

public boolean runFlag = true;

private String [] participatorName = {"Ton","Jory","Anry","Helen","Jim","Aric","张三","李四"};

private String [] prize = {"特等奖","一等奖","二等奖","三等奖","抚慰奖"};

// 抽奖者

public List nameList = new ArrayList();

// 奖品

public List prizeList = new ArrayList();

/**

* 在此构造函数中设置抽奖者和奖品的列表

*

*/

private Participator(){

// 注意Arrays.asList(Array)返回的List 并不是我们ArrayList

// 它返回的List是不可以进行insert,remove,delete的 ,这是java的设计者在设计Arrays的时候

// 处于其他原因大的考虑造成的,还有对应的一个容器的操作Collections类也是如此

// 所以我们要转化一下,不然就会发生UnsupportedOperationException

nameList = new ArrayList(Arrays.asList(participatorName));

prizeList = new ArrayList(Arrays.asList(prize));

}

/**

* 单例在这有点大才小用了

*

* @return participator

*/

public static Participator getParticipator(){

if(participator == null){

participator = new Participator();

}

return participator;

}

/**

* 开始抽奖和停止抽奖的一个判断

* runFlag = true 的话抽奖开始

* runFlag = false 的话抽奖结束

*/

private void invertFlag(){

runFlag = !runFlag;

}

/**

* 对已经获奖了的人 和奖品进行移除

*

* @param num1 获奖人的下标

* @param num2 奖品的下标

*/

public void removeOne(int num1,int num2){

// 对已经获奖了的人 和奖品进行移除

if(!runFlag){

synchronized(this){

removeOne(num1);

removePrize(num2);

}

}

// 开始抽奖和停止抽奖的设置

invertFlag();

}

/**

* 移除已经获奖人的名字

* @param num 获奖人的下标

*/

private void removeOne(int num){

nameList.remove(num);

}

/**

* 移除已经被抽走的奖品

* @param num 奖品的下标

*/

private void removePrize(int num){

prizeList.remove(num);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值