java模拟一个抽奖程序

今天用一个程序模拟一个从1-32之间,随机抽取7组号码的抽奖程序
 * 需要使用Java的图形界面知识
 * 窗口  JFrame
 * 面板  JPanel
 * 显示文本信息的标签  JLabel
 * 文本框 JTextField
 * 按钮  JButton

还涉及到线程Thread

先看效果图:

但是这里留一个问题?就是去除重复数字(可以自己先实现,后期我会上传的)

下面看看代码,代码中有注释,不懂留言:

package thread.test1;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
 * 本程序模拟一个从1-32之间,随机抽取7组号码的抽奖程序
 * 需要使用Java的图形界面知识
 * 窗口  JFrame
 * 面板  JPanel
 * 显示文本信息的标签  JLabel
 * 文本框 JTextField
 * 按钮  JButton
 *
 * */
public class GoodLuck_1 extends JFrame {
	JPanel pn1=null;
	JPanel pn2;
	JPanel pn3;
	JTextField tf=null;
	JLabel msg=null;
	JButton btn1;
	JButton btn2;
	boolean flag=true;//用于判断是否继续输出出奖号码的标志。

	//在构造器中,初始化界面
	public GoodLuck_1(){
		tf=new JTextField(40);//参数意思是,该文本框能够放多少个字符
		pn1=new JPanel();
		//组件放在面板上
		pn1.add(tf);
		//将面板放在窗口上,当前窗口对象就是this,放在顶部(上北)
		this.add(pn1, BorderLayout.NORTH);
		/*
		 * Java的JFrame对象,默然的布局管理器是“边界布局” 类名是BorderLayout
		 *
		 * */
		msg=new JLabel("欢迎访问好运气抽奖程序!");
		pn2=new JPanel();
		pn2.add(msg);
		//面板放在窗体上
		this.add(pn2, BorderLayout.CENTER);

		//底部的按钮部分
		btn1=new JButton("开始");

		//给开始按钮加入事件
		btn1.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				//给出奖标志赋值
				/*
				flag=true;
				chouJiang();
				*/
				/*
				 * 必须使用多线程技术,重新启动一个新的线程,去赋值flag
				 * 接着调用chouJiang(), 才可以是程序恢复响应。
				 * */
				class ThreadStart extends Thread {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						//在这里去调用抽奖方法
						flag=true;
						chouJiang();
					}
				}

				//必须将上面的线程内部类,实例化,之后启动
				new ThreadStart().start();
			}

		});

		btn2=new JButton("停止");

		//给停止按钮添加事件监听
		btn2.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				//必须启动一个新的停止线程,才能终止无限循环
				class ThreadStop extends Thread{
					@Override
					public void run() {
						// TODO Auto-generated method stub
						flag=false;
					}
				}

				//启动上面的内部类线程
				new ThreadStop().start();
			}

		});

		pn3=new JPanel();
		pn3.add(btn1);
		pn3.add(btn2);

		this.add(pn3, BorderLayout.SOUTH);

		//设置窗口的属性
		this.setTitle("好运气中奖程序1.0");
		this.setSize(500, 400);
		this.setLocation(100, 50);
		//JFrame默认的关闭按钮,只是隐藏窗口,需要重写设计关闭功能
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

		//chouJiang();
	}

	//对于一个复杂的任务,首先想到的是封装方法
	public void chouJiang(){
		/*
		 * 由于开始按钮启动后,什么时候停止,不确定,因此循环次数也不确定
		 * 需要使用while循环,而且开始就是无限循环
		 * */
		String text="";  //作用是显示在文本框中的号码序列
		while(flag){
			/**
			 * 每次循环都是从1-32之间,随机抽取7组号码,拼成字符串
			 * 显示在文本框中
			 * */
			text="";  //每次显示号码时,都重新显示新抽的号码
			for(int i=0;i<7;i++){
				int m=(int)(Math.random()*32+1);
				if(m<10){
					text=text+"  0"+m;
				}
				else {
					text=text+"  "+m;
				}
			}
			//这里需要一点时间的停顿,否则循环太快,会出问题

			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//显示在文本框中
			tf.setText(text);
		}

	}

	public static void main(String[] args) {
		//在正在的开发中,main方法中的代码,越少越好。
		new GoodLuck_1();
	}

}

有需要的自己那过去试一试,玩一玩!

时间: 2024-10-12 14:13:58

java模拟一个抽奖程序的相关文章

黑马程序员——java——模拟一个字符串中的trim方法去掉一个字符串两端的空格

模拟一个字符串中的trim方法去掉一个字符串两端的空格 public class StingTrimDemo { //模拟一个trim方法, 去掉一个字符串两边的空格], public static void main(String[] args) { // TODO Auto-generated method stub String s = " my java "; System.out.println("未去空格前的字符串+++:[ "+s+" ]&q

为什么用 Java:一个 Python 程序员告诉你

这篇文章专门给程序员写的,普通读者慎入.原作者:Kevin Sookocheff 译者:Celia Zhen,原文点击文末链接. 每当我告诉别人我一直在用Java工作时,大家的反应都是: “纳尼!Java?为啥是Java?” 说实话,本人刚开始的时候也是同样的反应.但是由于Java的类型安全,执行性能和坚如磐石的工具,我渐渐地开始欣赏Java.同时我注意到,现在的Java已今非昔比——它在过去的10年间稳健地改善着. 缘何是Java? 假 设每天都用Java的想法还没有让君恶心到食不下咽,我在此

黑马程序员——java——获取一个应用程序运行的次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序

获取一个应用程序运行的次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; public class Test5 { public static void main(String[] args) th

java版转盘抽奖程序

最近抽空弄了个转盘抽奖程序,属于半原创,是基于网络上分享的资源二次开发的. 由于未知最初出处,也不知本人搜寻的资源是属于第几手,因此暂无法给出转载链接. ---------- 如果其他人要转载本文,请加上本文链接,毕竟这算本人二次开发的小作品. --------- 下载地址: http://yunpan.cn/cjG2P5kBfvQ6H  提取码 ff7d --------- 本程序 效果如图所示:

java模拟一个简单的QQ

效果图:       1 package testFour; 2 3 import java.awt.Color; 4 import java.awt.Dimension; 5 import java.awt.FontMetrics; 6 import java.awt.Graphics; 7 import java.io.ByteArrayInputStream; 8 import java.io.IOException; 9 import java.io.InputStream; 10 im

linux下模拟一个木马程序运行过程

预备知识: 将一个程序放入到后台,悄悄的执行 ./xxx.sh & 进程: 用户进程:由用户来管理 系统进程:由系统内核自行管理 系统中的每个进程,都有一个位置的ID,这就是pid,而且每次启动进程以后,PID都不相同 进程相关的命令 jobs 作用:查看当前运行在后台的进程有哪些 信息 第一列:进程编号 第二列:进程状态 第三列:进程是如何发起的 fg   进程编号    把进程从后台调到前台执行 kill %进程编号  杀死进程 ps aux   打印系统所有进程 num=`ps aux |

显示一个抽奖程序

import tkinterimport randomimport threadingimport time import tkinter as tkfrom PIL import Image, ImageTk class App(tk.Frame): def __init__(self, master=None): super().__init__(master, width=400, height=300) self.pack() self.pilImage = Image.open("do

Java使用LinkedList模拟一个堆栈或者队列数据结构

用Java模拟一个堆栈或者队列数据结构. 首先得明白堆栈和队列的数据结构: 堆栈:先进后出 队列:先进先出 LinkedList中刚好有addFirst()和addLast()方法. [java] view plaincopyprint? public class Stack { public static void main(String[] args) { StackTools tools = new StackTools(); tools.add("a"); tools.add(

如何用 Python 写一个简易的抽奖程序

不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下手. 其实这个很正常,刚开始学习写代码,都是跟着别人的套路往下写,看的套路少,很难形成自己的套路,这就和做数学题是一样的,做一道题就想会所有的题目,这个可能性微乎其微,都是通过大量的练习来摸索到自己的套路. 正好快过年了,各个公司都会搞一些抽奖活动,小编今天就来聊一下,如果要写一个简单的抽奖程序,小