Java多线程应用实例:制作烟花效果 本例知识点 一句话讲解 新学 使用Graphics类 绘制烟花 知识 使用Thread类 管理线程 已学 使用Math类 产生随机数 知识 使用Color类 设置颜色 —、 练习具体要求 本例制作烟花,运行效果如图941所示。执行本例实例后,用鼠标点击浏览器中的面 板,将出现五彩缤纷的烟花效果。本实例的知识点有:鼠标事件的监听,Graphics类和Thread 类的应用。 二、程序及注释 (1)编程思路:本例因为要模拟烟花效果,所以首先定义执行程序主线程的函数run(0 对一个烟花进行绘制。在函数runO中定义Graphics类的对象,通过程序中的算法来绘制 烟花。然后,因为要实现烟花的缤纷闪烁效果,所以要通过Thread类的 Thread.currentThread().sleep()方法使当前线程睡眠,让用户欣赏到当前的绘制效果。最 后,因为要实现人机交互.,所以首先要通过mousePressed(MouseEvent e)函数来实现对鼠 标事件的监听,这样当按下鼠标时,产生一个新线程就可以看到一个新的烟花效果。 (2)程序实现及注释: import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; public class Fireworks extends Applet implements MouseListener,Runnable int x,yi int top,point; /* *对小程序进行变量和颜色的初始化
Java 多线程应用实例: 制作烟花效果 本例知识点 一句话讲解 新学 知识 使用 Graphics 类 绘制烟花 使用 Thread 类 管理线程 已学 知识 使用 Math 类 产生随机数 使用 Color 类 设置颜色 一、练习具体要求 本例制作烟花,运行效果如图 94-1 所示。执行本例实例后,用鼠标点击浏览器中的面 板,将出现五彩缤纷的烟花效果。本实例的知识点有:鼠标事件的监听,Graphics 类和 Thread 类的应用。 二、程序及注释 (1)编程思路:本例因为要模拟烟花效果,所以首先定义执行程序主线程的函数 run() 对一个烟花进行绘制。在函数 run()中定义 Graphics 类的对象,通过程序中的算法来绘制 烟 花 。 然 后 , 因 为 要 实 现 烟 花 的 缤 纷 闪 烁 效 果 , 所 以 要 通 过 Thread 类 的 Thread.currentThread().sleep()方法使当前线程睡眠,让用户欣赏到当前的绘制效果。最 后,因为要实现人机交互.,所以首先要通过 mousePressed(MouseEvent e)函数来实现对鼠 标事件的监听,这样当按下鼠标时,产生一个新线程就可以看到一个新的烟花效果。 (2) 程序实现及注释: import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; public class Fireworks extends Applet implements MouseListener,Runnable { int x,y; int top,point; /** *对小程序进行变量和颜色的初始化。 */
public void init() ×=0 y=0; /设置背景色为黑色 setBackground(Color.black); addMouseListener(this); public void paint(Graphics g) /女* *使该程序可以作为应用程序运行。 * public static void main(String args[]){ Fireworks applet new Fireworks(); JFrame frame new JFrame("TextAreaNew"); frame.addwindowListener(new WindowAdapter(){ public void windowclosing(WindowEvent e){ System.exit(0); }): frame.getContentPane().add( applet,BorderLayout.CENTER); frame.setsize(800,400); applet.init () applet.start();
public void init() { x = 0; y = 0; //设置背景色为黑色 setBackground(Color.black); addMouseListener(this); } public void paint(Graphics g) { } /** *使该程序可以作为应用程序运行。 */ public static void main(String args[]) { Fireworks applet = new Fireworks(); JFrame frame = new JFrame("TextAreaNew"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); frame.getContentPane().add( applet, BorderLayout.CENTER); frame.setSize(800,400); applet.init(); applet.start();
frame.setvisible(true); /* *程序主线程,对一个烟花进行绘制。 */ public void run() { //变量初始化 Graphics gl; gl getGraphics(); int y move,y click,x click; int vi x_click x; y click yi y move 400; v=3; int r,g,b; while(y_move y_click) g1.setColor(Color.black); g1.filloval(x_click,y_move,5,5); y move -=5; r =(((int)Math.round (Math.random()*4321))8200)+55; g (((int)Math.round(Math.random()*4321))8200)+55; b=(((int)Math.round(Math.random()*4321))号200)+55; g1.setColor(new Color(r,g,b)); g1.filloval(x click,y move,5,5); for(int j=0 ;j<=10;j++)
frame.setVisible(true); } /** *程序主线程,对一个烟花进行绘制。 */ public void run() { //变量初始化 Graphics g1; g1 = getGraphics(); int y_move,y_click,x_click; int v; x_click = x; y_click = y; y_move = 400; v = 3; int r,g,b; while(y_move > y_click) { g1.setColor(Color.black); g1.fillOval(x_click,y_move,5,5); y_move -= 5; r = (((int)Math.round(Math.random()*4321))%200)+55; g = (((int)Math.round(Math.random()*4321))%200)+55; b = (((int)Math.round(Math.random()*4321))%200)+55; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move,5,5); for(int j = 0 ;j<=10;j++)
{ if(r>55)x-=20: if(g>55)g-=20; 1f(b>55)b-=20: g1.setColor(new Color(r,g,b)); g1.fillOval(x click,y move+j*5,5,5); g1.setColor(Color.black); g1.fillOval(x click,y move+5*10,5,5); try Thread.currentThread().sleep(v++); catch (InterruptedException e){) for(int j=12;j>=0;j--) g1.setColor(Color.black); g1.filloval(x_click,y_move+(j*5),5,5); try Thread.currentThread().sleep((v++)/3); catch (InterruptedException e){) y move =400; g1.setColor(Color.black); while(y_move y_click)
{ if(r>55) r -= 20; if(g>55) g -= 20; if(b>55) b -=20; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move+j*5,5,5); } g1.setColor(Color.black); g1.fillOval(x_click,y_move+5*10,5,5); try { Thread.currentThread().sleep(v++); } catch (InterruptedException e) {} } for(int j=12;j>=0;j--) { g1.setColor(Color.black); g1.fillOval(x_click,y_move+(j*5),5,5); try { Thread.currentThread().sleep((v++)/3); } catch (InterruptedException e) {} } y_move = 400; g1.setColor(Color.black); while(y_move > y_click) {
g1.filloval(x_click-2,y_move,9,5); y_move -=5; v=15: for(int i=0;i<=25;i++) r (((int)Math.round(Math.random()*4321))8200)+55; g =(((int)Math.round (Math.random()*4321))8200)+55; b (((int)Math.round (Math.random()*4321))$200)+55; g1.setColor(new Color(r,g,b)); gl.drawoval(x_click-3*i,y_click-3*i,6*i,6*i); if(i<23) g1.drawOva1(x_c1ick-3*(i+1),y_c1ick-3*(i+1),6*(i+1),6*(i+1); g1.draw0va1(x_c1ick-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2)): try Thread.currentThread().sleep(v++); catch (InterruptedException e)() g1.setColor(Color.black); gl.drawOval(x click-3*i,y click-3*i,6*i,6*i);
g1.fillOval(x_click-2,y_move,9,5); y_move -= 5; } v = 15; for(int i=0;i<=25;i++) { r = (((int)Math.round(Math.random()*4321))%200)+55; g = (((int)Math.round(Math.random()*4321))%200)+55; b = (((int)Math.round(Math.random()*4321))%200)+55; g1.setColor(new Color(r,g,b)); g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i); if(i<23) { g1.drawOval(x_click-3*(i+1),y_click-3*(i+1),6*(i+1),6*(i+1)); g1.drawOval(x_click-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2)); } try { Thread.currentThread().sleep(v++); } catch (InterruptedException e) {} g1.setColor(Color.black); g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i); } }