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