为学习添加点乐趣---过年放烟花
[来源] 达内 [编辑] 达内 [时间]2013-08-13
参赛学员:刘吉超
获奖奖项:三等奖
一、使用
我做得烟花的程序,用鼠标点击界面,将出现的烟花效果,中间将会出现新年快乐。由于无法上图,就没法查看效果啦,用到的知识点有:鼠标事件的监听,Graphics类和随机类Random以及JPanel等。
二、代码及注释如下
首先是,Fire类,含有main方法
package day01;
import java.awt.Color;
import ;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fire extends JFrame{
private static final long serialVersionUID = 1L;
int x, y;
char[] chars={'新','年','快','了'}; //要显示的文字
public Fire() {
super("烟火");
}
public static void main(String[] args) {
Fire frame = new Fire();
frame.init();
frame.setSize(800, 500); //设置窗体的大小
frame.setLocationRelativeTo(null); //使窗体在屏幕上居中
frame.setVisible(true);//设置窗体显示
}
public void init() {
JPanel panel = new JPanel();
panel.setBackground();
getContentPane().add(panel);//更改窗体内容窗格为Jpane
addMouseListener(new MouseAdapter(){//添加事件
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
x = e.getX();
y = e.getY();
Graphics g1 = getGraphics();
drawOval one = new drawOval(x,y,g1,chars);
one.start();
}
});
}
}
下面这个用于创建椭圆型烟花
package day01;
import java.awt.Color;
import ;
import java.util.Random;
public class drawOval extends Thread {
int x, y;
Graphics g1;
char[] chars;
drawOval(int x, int y, Graphics g1,char[] chars) {
this.x = x;
this.y = y;
this.g1 = g1;
this.chars=chars;
}
public void run() {
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();
g1.fillOval(x_click,y_move,5,5);
y_move -= 5;
Random color=new Random(); //通过Random生成上升轨迹的随机颜色
r = color.nextInt(256);
g = color.nextInt(256);
b = color.nextInt(256);
g1.setColor(new Color(r, g, b));
g1.fillOval(x_click,y_move,5,5);
for(int j = 0;j <= 10;j++) {
r = color.nextInt(256);
g = color.nextInt(256);
b = color.nextInt(256);
g1.setColor(new Color(r,g,b));
g1.fillOval(x_click,y_move+j*5,5,5);
}
g1.setColor();
g1.fillOval(x_click,y_move+5*10,5,5);
try { //-----作延迟用,这些效果好,否则单击后很快就执行完了 看不到效果
Thread.sleep(v++);
} catch (InterruptedException e) {
}
}
for(int j = 0;j <= 10;j++) {
g1.setColor();
g1.fillOval(x_click,y_move+j*5,5,5);
}
for (int i = 0; i <= 25; i++) {
Random color=new Random(); //生成烟花的随机颜色
r = color.nextInt(256);
g = color.nextInt(256);
b = color.nextInt(256);
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));
g1.drawOval(x_click-3*(i+3),y_click-3*(i+3),6*(i+3),6*(i+3));
}
if(i>5){
drawChars two = new drawChars(x,y,g1,chars);
two.start();
}
try {
Thread.sleep(v++);//在指定的毫秒数内让当前正在执行的线程休眠
} catch(InterruptedException e){
}
g1.setColor();
g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
try {
Thread.sleep(v++);
} catch (InterruptedException e) {
}
g1.setColor();
g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
if(i==25){
x_click = x-5*(chars.length);
g1.setColor();
g1.drawChars(chars, 0, chars.length, x_click, y_click);
}
}
}
}
下面这个类用于生成文字
package day01;
import java.awt.Color;
import ;
import java.util.Random;
public class drawChars extends Thread {
int x, y;
Graphics g1;
char[] chars;
drawChars(int x, int y, Graphics g1,char[] chars) {
this.x = x;
this.y = y;
this.g1 = g1;
this.chars=chars;
}
public void run() {
int y_click, x_click;
x_click = x-5*(chars.length);
y_click = y;
int r, g, b;
for (int i = 0; i <= 25; i++) {//实现文字颜色变换
Random color=new Random();
r = color.nextInt(256);
g = color.nextInt(256);
b = color.nextInt(256);
g1.setColor(new Color(r, g, b));
g1.drawChars(chars, 0, chars.length, x_click, y_click);
}
}
}
网友评论 已有 0 条评论,查看更多评论»