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

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

现在让点点自己跑,并且边跑边画圈。而且在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) { } }

  

java动态画圈圈。运用多线程,绘图的更多相关文章

  1. Java 动态写轮眼 SharinganJPanel (整理)

      /** * Java 动态写轮眼 SharingganJPanel (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * 设计声明: * 1.虽然岸本是日本人,而我个人作为其模仿者,依 ...

  2. Java 动态眨眼 EyesJPanel (整理)

    /** * Java 动态眨眼 EyesJPanel (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * 注意事项: * 1.本程序为java程序,同时感谢您花费宝贵的时间来阅读本文档: ...

  3. 深入理解 Java 动态代理机制

    Java 有两种代理方式,一种是静态代理,另一种是动态代理.对于静态代理,其实就是通过依赖注入,对对象进行封装,不让外部知道实现的细节.很多 API 就是通过这种形式来封装的. 代理模式结构图(图片来 ...

  4. 第九节:详细讲解Java中的泛型,多线程,网络编程

    前言 大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢 泛型 泛型格式:ArrayList list= new ArrayList(); ArrayList list= ...

  5. Java知多少(97)绘图模式概述

    绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色.例如,后绘制的覆盖早先绘制的:或者后绘制与早先绘制的两种颜色按某种规则混合.主要有正常模式和异或模式两种:正常模式是后绘制的图 ...

  6. Java编写画图板程序细节-保存已画图形

    没有Java编写画图板程序细节-保存已画图形   一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...

  7. java动态编译 (java在线执行代码后端实现原理)(二)

    在上一篇java动态编译 (java在线执行代码后端实现原理(一))文章中实现了 字符串编译成字节码,然后通过反射来运行代码的demo.这一篇文章提供一个如何防止死循环的代码占用cpu的问题. 思路: ...

  8. Java 动态调试技术原理及实践

    本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停顿,使得整个应用停止响应. ...

  9. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

随机推荐

  1. web.xml上监听器作用

    <!--Spring ApplicationContext 载入 --> <listener> <listener-class>org.springframewor ...

  2. sklearn学习笔记之开始

    简介   自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了.scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征 ...

  3. LeetCode第[53]题(Java):Maximum Subarray

    题目:和最大的子序列 难度:Medium 题目内容: Given an integer array nums, find the contiguous subarray (containing at ...

  4. python学习笔记(requests)

    昨天用jmeter尝试了下接口测试 在部分接口中要上传文件这里遇到了问题.今天改用python的requests框架试下 先简单的写了个登录的接口.本人初学者,第一次写接口脚本 #!/usr/bin/ ...

  5. socket编程 TCP 粘包和半包 的问题及解决办法

    一般在socket处理大数据量传输的时候会产生粘包和半包问题,有的时候tcp为了提高效率会缓冲N个包后再一起发出去,这个与缓存和网络有关系. 粘包 为x.5个包 半包 为0.5个包 由于网络原因 一次 ...

  6. uva11827gcd

    gcd裸题,不过输入要注意gets会tle,要用快速读入 #include<map> #include<set> #include<cmath> #include& ...

  7. grunt,gulp,webpack前端打包工具的特性

    1.http://www.cnblogs.com/lovesong/p/6413546.html (gulp与webpack的区别) 2.http://blog.csdn.net/qq_3231263 ...

  8. openstack-mitaka版本DRV基础

    一.基础知识 1.1 路由 1.1.1 策略路由 1.1.2 路由表 (使用 ip route 命令操作静态路由表) 1.1.3 路由分类之静态路由 1.1.4 路由分类之动态路由 1.1.5 ip ...

  9. opencv:创建滑动条

    函数原型: ,); #include <opencv.hpp> using namespace cv; #define WINDOW_NAME "线性混合示例" // ...

  10. 微信oauth2验证

    微信公众号进行oauth2验证时的要求: 需要两个地方配置: (1)   Oauth2验证链接中的appid.redirecturi (2)   微信公众号授权回调页面域名: Appid为公众号的ap ...