Java抽奖小程序

JAVA年会抽奖小程序


使用jl1.0.1.jar ,jflac-1.2.jar,commons-io-2.2.jar,poi.jar,mp3spi-1.9.5-1.jar
工程目录:
在这里插入图片描述

代码片.

// 程序入口
public class App {
	
	public static void main(String[] args){
		AppMainFrame m = new AppMainFrame();
		m.setVisible(true);
	}	
}
//窗口主体
package NewAppMain;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.border.MatteBorder;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.formula.functions.Value;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;







import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;




public class AppMainFrame extends JFrame implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;	
	
	JTextArea jta; // 文本域
	JTextField jtf; // 文本框
	JPanel jp1, jp2;
	JButton jb1, jb2, jb3;
	JScrollPane jsp; // 下拉滚动条
	JLabel jtfTie;
	
    boolean flag=false;//用于判断是否继续输出出奖号码的标志。
    private List<String> li;  
    private List<String> liNew;  
    int m;
    private String title="";
    private String LuckyUser="";
    private String titleColor ="";
    private String CenterColor="";
    private String RightColor="";
    
    private int TitleSize=0;
    private int CenterSize=0;
    private int RightSize=0;
    
    private XSSFRow row;
    private XSSFCell cell;
	private ThreadStart threadStart;  
	//加载背景音乐
	 File mp3 = new File(".\\background.mp3");
	 FileInputStream inputStream = null;
     BufferedInputStream bufferedInputStream = null;
   
	public AppMainFrame(){
		ConPanel();
	}
	private void ConPanel(){
		//获取电脑桌面宽高,不包含任务栏
		GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
		Rectangle rect=ge.getMaximumWindowBounds();	
//		rect.width = 300;
//		rect.height = 300;
		li = new ArrayList<String>();
		GetExcel();
		this.setSize(rect.width, rect.height);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setLayout(new BorderLayout());
		
		
		ImageIcon icon=new ImageIcon("image/background.jpg");
		icon.setImage(icon.getImage().getScaledInstance(rect.width,rect.height,icon.getImage().SCALE_DEFAULT));
		JLabel label=new JLabel(icon);
		//设置label的大小
		label.setBounds(0,0,rect.width,rect.height);
		
		//获取窗口的第二层,将label放入
		this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
		JPanel P1 = (JPanel)this.getContentPane();
		P1 = (JPanel)this.getContentPane();
		P1.setOpaque(false);				
			
		
		jtfTie = new JLabel();
		jtfTie.setBounds(0,0,rect.width,rect.height/8);
		jtfTie.setHorizontalAlignment(JTextField.CENTER);
		jtfTie.setFont(new Font("黑体", Font.BOLD, TitleSize));
		jtfTie.setForeground(Color.decode(titleColor));
		jtfTie.setText(title);	
		
		
		// 东面板
		jp1 = new JPanel();
		jp1.setLayout(null);		
		// 文本域
		jta = new JTextArea();
		jta.setLineWrap(true);// 激活自动换行功能
		jta.setWrapStyleWord(true);// 激活断行不断字功能
		jta.setEditable(false);// 不可编辑
		jta.setFont(new Font("黑体", Font.BOLD, RightSize));	
		jta.setForeground(Color.decode(RightColor));
		
		
		jsp = new JScrollPane(jta);// 文本滚动条
		jsp.setBounds((int) (rect.width*8/10), rect.height/7, rect.width/7, rect.height/2);	
		jsp.setBorder(new RoundBorder(Color.WHITE));
		//设置透明背景
		jsp.setOpaque(false);
		jsp.getViewport().setOpaque(false);
		

		// 文本框
		jtf = new JTextField();
		jtf.setBounds(rect.width*4/10, rect.height/3, rect.width/4, rect.height/4);
		jtf.setHorizontalAlignment(JTextField.CENTER);
		jtf.setFont(new Font("黑体", Font.BOLD, CenterSize));
		jtf.setEditable(false);// 不可编辑
		jtf.setBorder(new RoundBorder(Color.WHITE));
		jtf.setForeground(Color.decode(CenterColor));
		jtf.setOpaque(false);

		// 按钮
		jb1 = new JButton("点击抽取");
		jb1.setBounds(rect.width/2,(rect.height*8/10),rect.width/18, rect.height/12);
		jb1.setBorder(new RoundBorder(Color.WHITE));
		jb1.setOpaque(false);
		jb1.addActionListener(this);// 添加点击事件监听
		
		
		//给按钮添加 空格键
		jb1.registerKeyboardAction(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if (li.size()<=0) {
						JOptionPane.showMessageDialog(null, "已经没有更多的人了", "提示", JOptionPane.INFORMATION_MESSAGE);
						return;
					}
					try {
			              inputStream = new FileInputStream(mp3);
			              bufferedInputStream = new BufferedInputStream(inputStream);
					} catch (Exception e2) {
						// TODO: handle exception
					}
					//创建一个新的集合
					liNew = new ArrayList<String>();
					for (int i = 0; i < li.size(); i++) {
						liNew.add(li.get(i));
					}
					if (!flag) {
	  		            try {
	  		              Player player = new Player(bufferedInputStream);
		  		          threadStart= new ThreadStart(player);
		  				  threadStart.start();
						} catch (Exception e2) {
							// TODO: handle exception
						}
	  		            //创建播放器对象,把文件的缓冲流传入进去		
						flag=true;
						jb1.setText("停止");
						  class ThreadStart extends Thread {
			                    @Override
			                    public void run() {
			                        // TODO Auto-generated method stub
			                        //调用抽奖方法
			                        //flag=true;
			                        Lucky_start();
			                    }
			                }			  
						     //必须将上面的线程内部类,实例化,之后启动
			                new ThreadStart().start();				
					}
					else {				
						flag=false;
						threadStart.close();
						jb1.setText("点击抽取");
							class ThreadStop extends Thread{
			                    @Override
			                    public void run() {
			                        // TODO Auto-generated method stub
			                        flag=false;
			                        if (li.size()<=0) {
										return;
									}else {
									   LuckyUser = LuckyUser+"\r\n"+li.get(m);              
									}                               
			                        //每次停止之后将获奖的人移出集合,避免重复获奖
			                        li.remove(li.get(m));
			                        jta.setText(LuckyUser);
			                    }
			                }                
			                //启动上面的内部类线程
			                new ThreadStop().start();
			            	
					}
				}
			},KeyStroke.getKeyStroke("SPACE"), JComponent.WHEN_IN_FOCUSED_WINDOW);
	
		//设置按钮监听
		jb1.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				//当参与人员全部抽完时
				if (li.size()<=0) {
					JOptionPane.showMessageDialog(null, "已经没有更多的人了", "提示", JOptionPane.INFORMATION_MESSAGE);
					return;
				}
				try {
		              inputStream = new FileInputStream(mp3);
		              bufferedInputStream = new BufferedInputStream(inputStream);
				} catch (Exception e2) {
					// TODO: handle exception
				}
				//创建一个新的集合
				liNew = new ArrayList<String>();
				for (int i = 0; i < li.size(); i++) {
					liNew.add(li.get(i));
				}
				if (!flag) {
					try {
	  		              Player player = new Player(bufferedInputStream);
		  		          threadStart= new ThreadStart(player);
		  				  threadStart.start();
						} catch (Exception e2) {
							// TODO: handle exception
						}
					flag=true;
					jb1.setText("停止");
					  class ThreadStart extends Thread {
		                    @Override
		                    public void run() {
		                        // TODO Auto-generated method stub
		                        //调用抽奖方法
		                        //flag=true;
		                        Lucky_start();
		                    }
		                }			  
					     //必须将上面的线程内部类,实例化,之后启动
		                new ThreadStart().start();				
				}
				else {
					flag=false;
					threadStart.close();
					jb1.setText("点击抽取");
						class ThreadStop extends Thread{
		                    @Override
		                    public void run() {
		                        // TODO Auto-generated method stub
		                        flag=false;
		                        if (li.size()<=0) {
									return;
								}else {
								   LuckyUser = LuckyUser+"\r\n"+li.get(m);              
								}                               
		                        //每次停止之后将获奖的人移出集合,避免重复获奖
		                        li.remove(li.get(m));
		                        jta.setText(LuckyUser);
		                    }
		                }                
		                //启动上面的内部类线程
		                new ThreadStop().start();
		            	
				}
				
			}
		});
		

// 面板-添加组件(component)
		jp1.add(jsp);

// 窗体-添加组件(component)
		this.add(jtfTie);
		this.add(jtf);
		this.add(jb1);
		this.add(jp1);
		//设置组件透明	
		jta.setOpaque(false);
		jp1.setOpaque(false);
		// 显示界面
		this.setVisible(true);		
	}
	
	public void Lucky_start(){	
		while (flag) {	
			//random函数 随机抽取
			  m=(int)(Math.random()*liNew.size());
	            try {
	                Thread.sleep(20);
	            } catch (InterruptedException e) {
	                // TODO Auto-generated catch block
	                e.printStackTrace();
	            }
	            //显示在文本框中
	            jtf.setText((liNew.get(m)).toString());	           
	        }					
	}
	public void GetExcel(){
		 File file=new File("./poi.xlsx");
		 try {
			  XSSFWorkbook workbook=new XSSFWorkbook(FileUtils.openInputStream(file));
			  Sheet sheet=workbook.getSheet("Name");
			  Sheet sheettiele=workbook.getSheet("title");
			  Sheet sheetColor=workbook.getSheet("color");
			  int lastRowNum=sheet.getLastRowNum();
			  int lastRowNumtitle=sheettiele.getLastRowNum();
			  
			  for (int i=0;i<=lastRowNum;i++){
		            Row row=sheet.getRow(i);
		            //获取当前行最后单元格列号
		            int lastCellNum=row.getLastCellNum();
		            for (int j=0;j<lastCellNum;j++){
		                //   Cell cell=row.getCell(j);
		                   DataFormatter formatter=new DataFormatter();
		                   String value=formatter.formatCellValue(row.getCell(j));
		                   li.add(value);
		               }
		        }
			  
			  for (int i=0;i<=lastRowNumtitle;i++){
		            Row row=sheettiele.getRow(i);
		            //获取当前行最后单元格列号
		            int lastCellNum=row.getLastCellNum();
		            for (int j=0;j<lastCellNum;j++){
		                //   Cell cell=row.getCell(j);
		                   DataFormatter formatter=new DataFormatter();
		                   String value=formatter.formatCellValue(row.getCell(j));
		                   title = value;
		               }
		        }
			  //获取字体颜色 大小  配置
			  row = (XSSFRow) sheetColor.getRow(1);
			  cell = row.getCell(0);
			  titleColor = cell.getStringCellValue();
			  
			  row = (XSSFRow) sheetColor.getRow(1);
			  cell = row.getCell(1);
			  TitleSize = (int) cell.getNumericCellValue();
			 
			  			  
			  row = (XSSFRow) sheetColor.getRow(3);
			  cell = row.getCell(0);
			  CenterColor = cell.getStringCellValue();
			 
			  
			  row = (XSSFRow) sheetColor.getRow(3);
			  cell = row.getCell(1);
			  CenterSize = (int) cell.getNumericCellValue();
			 
			  
			  row = (XSSFRow) sheetColor.getRow(5);
			  cell = row.getCell(0);
			  RightColor = cell.getStringCellValue();
			  
			  
			  row = (XSSFRow) sheetColor.getRow(5);
			  cell = row.getCell(1);
			  RightSize = (int) cell.getNumericCellValue();
			 
			  
			  
		} catch (Exception e) {
			// TODO: handle exception
		}
	   
	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}
	
}

//Swing
//设置圆角边框(可以自定义边框的颜色)
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
 
import javax.swing.border.Border;
 
/**
 * Swing
 * 设置圆角边框(可以自定义边框的颜色)
 * 可以为button,文本框等人以组件添加边框
 * 使用方法:
 * JButton close = new JButton(" 关 闭 ");
 * close.setOpaque(false);// 设置原来按钮背景透明
 * close.setBorder(new RoundBorder());黑色的圆角边框
 * close.setBorder(new RoundBorder(Color.RED)); 红色的圆角边框
 * 
 * @author Monsoons
 */
public class RoundBorder implements Border {
	private Color color;
 
	public RoundBorder(Color color) {// 有参数的构造方法
		this.color = color;
	}
 
	public RoundBorder() {// 无参构造方法
		this.color = Color.BLACK;
		// 如果实例化时,没有传值
		// 默认是黑色边框
	}
 
	public Insets getBorderInsets(Component c) {
		return new Insets(0, 0, 0, 0);
	}
 
	public boolean isBorderOpaque() {
		return false;
	}
 
	// 实现Border(父类)方法
	@Override
	public void paintBorder(Component c, Graphics g, int x, int y, int width,
			int height) {
		g.setColor(color);
		g.drawRoundRect(0, 0, c.getWidth() - 1, c.getHeight() - 1, 15, 15);
	}
}
//线程播放
package NewAppMain;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;


public class ThreadStart extends Thread{
	private  Player player;
	
	public ThreadStart(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void run() {
		try {
			player.play();
		} catch (JavaLayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

	public void close() {
		player.close();
	}
	
}

新建poi.xlsx表格分别包含名单表,字体样式表,以及设置主题名称表
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值