java多线程实现礼花绽放的效果,

总结:主要是那个红点点在上升的过程中要涂黑色,其实它不是一个点,是一个长条,而是被涂成黑色而隐藏了。还有这个睡眠时间,多线程

    是你在面板上随便点,会出现随机的颜色圆圈,点哪里,哪里就可以出现圆

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.*;

public class Test1 {
	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(3);
		f.setVisible(true);
		f.setBounds(100, 100, 500, 500);
		Panel p = new Panel();
		p.setBackground(Color.black);
		f.add(p);

	}

}

class Panel extends JPanel implements MouseListener, Runnable {
	int x;
	int y;// 定义那个坐标

	public Panel() {

		this.addMouseListener(this);
		// this.setBackground(Color.) //在面板上涂成黑色,已经在min函数里定义了,怎么还要这么做呢么?
	}

	// 一直往坐上变的顶角跑啊????
	@Override
	public void run() {// 线程=======核心代码

		int xx = x;
		int yy = y;
		// 在这里添加核心关键的定义,
		int max_y = 450;// 这个应该是礼花绽放的最高位置吧???
		Graphics g = this.getGraphics();
		while (yy < max_y) {
			// GrayFilter g=this.getGraphics();//这个画图的方法在循环外部
			g.setColor(Color.red);
			g.fillOval(xx, max_y = max_y - 5, 5, 5);// 画个圆形是刚开始运行时出现的时候
			try {
				Thread.currentThread().sleep(40);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}// 睡眠

			g.setColor(Color.black);
			g.fillOval(xx, max_y, 5, 5);// 这里都要画两遍,为什么???在这里坐标不要改为:max_y=max_y-5
		}

		Random r = new Random();

		for (int i = 0; i < 53; i++) {
			g.setColor(Color.yellow);
			g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
			g.drawOval(xx - i * 2, max_y - i * 2, i * 4, i * 4);
			g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);
			g.drawOval(xx - i * 4, max_y - i * 4, i * 8, i * 8);
			try {
				Thread.currentThread().sleep(40);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			g.setColor(Color.black);
			g.drawOval(xx - i * 2, max_y - i * 2, i * 4, i * 4);
			g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);
			g.drawOval(xx - i * 4, max_y - i * 4, i * 8, i * 8);

		}

	}

	@Override
	public void mouseClicked(MouseEvent e) {// 这个方法是,当点击鼠标时的操作
		// 这里的E为对象=

	}

	@Override
	public void mousePressed(MouseEvent e) {// 这个方法是按下鼠标的操作
		x = e.getX();
		y = e.getY();// 你妹啊=。这里用int类型去定义的。
		Thread t = new Thread(this);
		t.start();

	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

}

  

原文地址:https://www.cnblogs.com/langlove/p/3472233.html