📄 roulette.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 + -