今天用一個程序模擬一個從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(); } }
有需要的自己那過去試一試,玩一玩!