今天用一个程序模拟一个从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