一、需求分析
面板:用於放置兩位抽獎號碼——號碼展示:1.數字 2.圖片
鼠標監聽器:按下鼠標,線程開始,開始號碼隨機滾動;釋放鼠標,判斷線程循環的值flag=0,號碼停止滾動,獲得中獎號碼。
線程:線程開始,繪制遮擋框,號碼number隨機生成,繪制號碼number,休眠0.1s(否則數字繪制過快,看不清楚)
二、系統實現
1、面板
package com.java7.choujiang0722;
import javax.swing.*;
import java.awt.*;
public class myFrame extends JFrame {
//主程序入口
public static void main(String args[]){
System.out.println("抽獎");
myFrame mf = new myFrame();
mf.showUI();
}
//展示UI函數
public void showUI(){
this.setTitle("抽獎");
this.setSize(600,600);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setVisible(true);
//在JFrame組件上獲取畫筆
Graphics g = this.getGraphics();
//添加監聽器,鼠標按壓JFrame,開始抽獎;釋放,結束抽獎
addMouseListener mouse = new addMouseListener(g);
this.addMouseListener(mouse);
}
}
2、鼠標監聽器
按下鼠標:線程開始
釋放鼠標:線程結束
package com.java7.choujiang0722;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class addMouseListener extends MouseAdapter {
public Graphics g;
private myThread tr ;
//構造函數,創建鼠標監聽器時,將畫筆傳入addMouseListener
public addMouseListener(Graphics g){
this.g = g;
}
//鼠標按下,開始抽獎
public void mousePressed(MouseEvent e) {
System.out.println("開始抽獎");
tr = new myThread(g);
tr.start();
}
//鼠標釋放,停止抽獎
public void mouseReleased(MouseEvent e) {
System.out.println("停止抽獎");
tr.flag = false;//public,公用,此處可以直接調用
}
}
3、線程
package com.java7.choujiang0722;
import javax.swing.*;
import java.awt.*;
public class myThread extends Thread {
private Graphics g;
public boolean flag = true;
//構造函數,創建線程時候,將畫筆傳入myThread
public myThread(Graphics g){
this.g = g;
}
ImageIcon icon;
public void run() {
while(flag){
System.out.println("run : 抽獎中");
//繪制抽獎數字
g.setFont(new Font("宋體",Font.BOLD,100));
g.setColor(Color.WHITE);
g.fillRect(100,100,400,400);
g.setColor(Color.RED);
g.drawString("幸運抽獎",100,200);
g.setColor(Color.CYAN);
int number = (int)(Math.random()*10);
g.drawString(number+"",240,330);
//根據隨機生成數字,獲取0-9的圖片;繪制圖片
icon = new ImageIcon(this.getClass().getResource(number+".png"));
g.drawImage(icon.getImage(),150,200,120,200,null);
number = (int)(Math.random()*10);
g.drawString(number+"",300,330);
icon = new ImageIcon(this.getClass().getResource(number+".png"));
g.drawImage(icon.getImage(),350,200,120,200,null);
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
super.run();
}
}