⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roulette.java

📁 模拟摇奖程序的Java作业
💻 JAVA
字号:
/****
本例用于模拟一个简单的摇奖程序
作者:曾立  
学号: S02623
Email: hd7279@163.com 
2003-7-1

*/

package roulette;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.border.*;

public class Roulette extends JFrame
{
	Vector v;
	private static final int PREFERRED_WIDTH = 600;
	private static final int PREFERRED_HEIGHT = 300;
	
	JLabel lblFstPrize = null;
	JLabel lblSecPrize = null;
	JLabel lblThiPrize = null;
	
	private static JLabel lblRandInfo = null;
	
	private static JSlider slider = null;
	
	public static boolean flag;//信号量
		
	 ExecuteThread executeThread = null;

	public static void main(String [] args)
	{
		Roulette r = new Roulette("简单摇奖程序 - 曾立(S02623)");
				
		r.pack();
		r.show();
	}
	
	public Roulette(String strTitle)
	{
		//设置框架标题
		super(strTitle);
		flag = false;
		
		//获取内容窗格
		Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());				
		
		JPanel p = new JPanel();
		
		p.setLayout(new GridLayout(6,1,1,1));
		lblRandInfo = new JLabel("Ready");		
		JButton btnExecute = new JButton("开始|停止");
		
		slider = new JSlider(JSlider.HORIZONTAL,1,5,3);
		
		//为滑杆组件绘制标签		
		slider.setPaintLabels(true);
		
		//滑杆组件间隔为20
		slider.setMajorTickSpacing(1);
						
		lblFstPrize = new JLabel("一等奖(1名): ");
		lblSecPrize = new JLabel("二等奖(2名): ");
		lblThiPrize = new JLabel("三等奖(3名): ");		
		
		p.add(lblRandInfo);
		p.add(btnExecute);
		p.add(slider);
		p.add(lblFstPrize);
		p.add(lblSecPrize);
		p.add(lblThiPrize);
		
		contentPane.add(p,BorderLayout.CENTER);
		
	    this.addWindowListener(new WindowAdapter(){
	    	public void windowClosing(WindowEvent e){
	    		System.exit(0);
	    	}
	    });
	    
		v = new Vector(6);
		
		executeThread = new ExecuteThread();
		executeThread.start();
		
		final JPanel panel = new JPanel();			
		btnExecute.addActionListener(new ActionListener(){
       		public void actionPerformed(ActionEvent e){       			
				if (v.size() < 6){
					try{					
						if (!flag){
							flag = true;
							if (!v.contains(getlblRandInfo())){//避免有重复的抽取
								 v.addElement(getlblRandInfo());
								 JOptionPane.showMessageDialog(panel.add(new JLabel()), getlblRandInfo() + "  已被成功抽出!","提示",JOptionPane.INFORMATION_MESSAGE);								 
								 int times = v.size();
								 
								 if (times == 1)
								 	setLblFstPrize(getLblFstPrize() + "  " + getlblRandInfo());
								 else {
								 	if (times ==2 || times == 3)
								 		setLblSecPrize(getLblSecPrize() + "  " + getlblRandInfo());
								 	else {
								 		if (times > 3) setLblThiPrize(getLblThiPrize() + "  "  + getlblRandInfo());
								 	}
								 }	
								 System.out.println(getlblRandInfo());
							}
						}
						else {
							flag = false;
						}
					}
					catch(Exception exc){
						exc.printStackTrace();
					}
				}
				else{
					//已经抽出6个奖项										
					int nResult = JOptionPane.showConfirmDialog(panel.add(new JLabel()),"本轮抽奖已经结束!谢谢。是否进行新一轮抽奖?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
					if (nResult == JOptionPane.YES_OPTION){
						//新一轮的抽取
						v.clear();
						setLblFstPrize("一等奖(1名): ");
						setLblSecPrize("二等奖(2名): ");
						setLblThiPrize("三等奖(3名): ");	
					}
					else {
						if (nResult == JOptionPane.NO_OPTION) System.exit(0);	
					}
				}
       		}
       	});       	
		
	}
	
	//覆盖getPreferredSize方法
	public Dimension getPreferredSize()
	{
		return new Dimension(PREFERRED_WIDTH,PREFERRED_HEIGHT);	
	}
	
	public static void setlblRandInfo(String str)
	{
		lblRandInfo.setText(str);	
	}
	
	public static String getlblRandInfo()
	{
		return lblRandInfo.getText();	
	}
	
	public static int getSliderValue()
	{
		return slider.getValue();	
	}	
	
	public void setLblFstPrize(String str)
	{
		lblFstPrize.setText(str);
	}
	
	public String getLblFstPrize()
	{
		return lblFstPrize.getText();	
	}
	
	public void setLblSecPrize(String str)
	{
		lblSecPrize.setText(str);
	}
	
	public String getLblSecPrize()
	{
		return lblSecPrize.getText();	
	}

	public void setLblThiPrize(String str)
	{
		lblThiPrize.setText(str);
	}
	
	public String getLblThiPrize()
	{
		return lblThiPrize.getText();	
	}
	
}

//执行线程
class ExecuteThread extends Thread
{
	public synchronized void run()
	{			
			int randNum;	
			
			//读入抽奖信息
			Vector recorders = new Vector(20);
			try{			
				FileInputStream fin = new FileInputStream(new File("info.txt"));			
				DataInputStream is = new DataInputStream((InputStream)fin);			
				InputStreamReader isReader = new InputStreamReader(is);
				BufferedReader bufReader = new BufferedReader(isReader);
							
				String s = null;
				while ((s = bufReader.readLine()) != null){
					recorders.addElement(s);
					//System.out.println(s);				
				}
			}
			catch(IOException e){
				e.printStackTrace();
				System.exit(0);	
			}
					
			while (true){
				if (!Roulette.flag){
					randNum = (int)(Math.random() * 20);
					Roulette.setlblRandInfo(recorders.elementAt(randNum).toString());				
				}
				
				try{
					//等待并释放资源
					Thread.currentThread().wait(Roulette.getSliderValue() * 10);
				}
				catch(InterruptedException e){
					e.printStackTrace();
				}
				catch(IllegalMonitorStateException e){
	        		System.out.println(e.toString());
				} 
			}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -