java画圈_java动态画圈圈。运用多线程,绘图

这篇博客介绍了一个Java程序,该程序使用多线程和Graphics类动态地在界面上画圈。当鼠标按下时,程序会在指定位置启动一个点,该点会逐渐上升并沿途画圈,形成类似礼花绽放的效果。程序中结合了随机颜色和不同大小的圆圈,通过调整线程睡眠时间和循环次数来控制画圈的速度和范围。
摘要由CSDN通过智能技术生成

总结:只是意外的收获吧。之前一篇是老师教的,一个点,从底层开始升起,到鼠标按下的地方开始画圈圈,

现在改变了一下,因为点上升的一个循环和画圈的循环是分开的

现在让点点自己跑,并且边跑边画圈。而且在for循环的最大值时终止“绽放”。很美

package com.aa;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.Random;

//实现一个礼花绽放的界面

import javax.swing.*;

public class Test6 {

public static void main(String[] args) {

JPanel jp = new JPanel();

JFrame f = new JFrame();

JLabel jl = new JLabel("周杰伦周杰伦周杰伦周杰伦周杰伦");

jl.setForeground(Color.red);// 字体设置红色

jl.setFont(new Font("", Font.ITALIC, 42));

JLabel jl2 = new JLabel("听妈妈的话");

jl2.setForeground(Color.green);

jl2.setFont(new Font("", Font.TRUETYPE_FONT, 33));

// f.setBackground(Color.black);//frame是块玻璃,不能直接添加背景颜色

f.setDefaultCloseOperation(3);

Panel p = new Panel();

p.add(jl);// 将label添加到panel里面

p.add(jl2);

p.setBackground(Color.black);// 这里还是改成

f.add(p);//

f.setVisible(true);

f.setBounds(100, 200, 500, 500);

}

}

class Panel extends JPanel implements Runnable, MouseListener, ActionListener {// 实现Runnable接口

int x, y;

public Panel() {

this.addMouseListener(this);

this.setBackground(Color.green);//

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) {

x = e.getX();

y = e.getY();

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

}

@Override

public void run() {

int xx = x;

int yy = y;

int max_y = 450;

while (yy < max_y) {

Graphics g = this.getGraphics();// 绘图的方法

g.setColor(Color.yellow);

g.fillOval(xx, max_y = max_y - 10, 10, 10);

// 这里睡眠是小点点上升的时间吗?

try {

Thread.currentThread().sleep(60);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

g.setColor(Color.black);

g.fillOval(xx, max_y, 10, 10);

// 把for循环放在while循环里了,所以点点跑哪里它就画哪里

Random r = new Random();

for (int i = 0; i < 30; i++) {

// g.setColor(Color.green);

g.setColor(new Color(r.nextInt(255), r.nextInt(255), r

.nextInt(255)));

g.drawOval(xx - i * 1, max_y - i * 1, i * 2, i * 2);

g.drawOval(xx - i * 2, max_y - 2 * i, i * 4, i * 4);

g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);

try {

Thread.currentThread().sleep(60);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 这里涉及一个睡眠,这个睡眠是每一次画圈后的等待时间吗?,还是点击其他点点的间隔时间

g.setColor(Color.black);// 画笔的颜色

g.drawOval(xx - i * 1, max_y - i * 1, i * 2, i * 2);

g.drawOval(xx - i * 2, max_y - 2 * i, i * 4, i * 4);

g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);

}

}

}

@Override

public void actionPerformed(ActionEvent e) {

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值