今天用一个程序模拟一个从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();
}
}
有需要的自己那过去试一试,玩一玩!