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();
	}

}

 有需要的自己那過去試一試,玩一玩!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM